如何在不使用选择性刷新的情况下在WordPress定制器中添加编辑快捷方式图标?

时间:2017-10-10 作者:Taj Khan

下面是我在customizer预览中添加颜色部分的代码

$wp_customize->add_section( \'cd_colors\' , array(
        \'title\'      => \'Colors\',
        \'priority\'   => 30,
    ) );
这是控制和设置

$wp_customize->add_setting( \'background_color\' , array(
        \'default\'     => \'#43C6E4\',
        \'transport\'   => \'postMessage\',
    ) );

    $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, \'background_color\', array(
        \'label\'        => \'Background Color\',
        \'section\'    => \'cd_colors\',
        \'settings\'   => \'background_color\',
    ) ) );
现在,我需要的只是在我应用此主题模式的元素旁边的一个编辑快捷方式图标

<div id="bg-color">
    <?php echo get_theme_mod( \'background_color\' ); ?>
</div>

enter image description here

现在,我能够添加该图标的唯一方法是使用选择性刷新,请参见下文

$wp_customize->selective_refresh->add_partial( \'background_color\', array(
        \'selector\' => \'#bg-color\',
        \'container_inclusive\' => false,
      \'render_callback\' => \'dummy_function\'
    ) );
但是,由于我使用的是自己的javascript,所以我不需要选择性刷新功能,我只需要一个图标,当单击该图标时,应该会进入所需的设置。这是我的javascript代码

( function( $ ) {

    // Update the site title in real time...
    wp.customize( \'background_color\', function( value ) {
        value.bind( function( newval ) {
            $( \'#bg-color\' ).css( \'background-color\', newval );
        } );
    } );

} )( jQuery );

1 个回复
最合适的回答,由SO网友:Weston Ruter 整理而成

您需要做的是实现一个自定义Partial 在JS中应用自定义refresh 修改的行为background-color 而不是从服务器获取新渲染的部分。因此,它是带有编辑快捷方式的分区,但没有任何服务器端选择性刷新。

例如,使用customize-selective-refresh 依赖关系:

wp.customize.selectiveRefresh.partialConstructor.background_color = (function( api, $ ) {
    \'use strict\';

    return api.selectiveRefresh.Partial.extend( {

        /**
         * Refresh.
         *
         * Override refresh behavior to apply changes with JS instead of doing
         * a selective refresh request for PHP rendering (since unnecessary).
         *
         * @returns {jQuery.promise} Resolved promise.
         */
        refresh: function() {
            var partial = this, backgroundColorSetting;

            backgroundColorSetting = api( partial.params.primarySetting );
            _.each( partial.placements(), function( placement ) {
                placement.container.css( \'background-color\', backgroundColorSetting.get() );
            } );

            // Return resolved promise since no server-side selective refresh will be requested.
            return $.Deferred().resolve().promise();
        }
    } );
})( wp.customize, jQuery );
然后,在注册partial时,请确保提供type 属于background_color 将PHP注册部分与JavaScript连接partialConstructor, 像这样:

$wp_customize->selective_refresh->add_partial( \'wpse_282425_background_color\', array(
    \'type\' => \'background_color\', //  Key addition.
    \'selector\' => \'#bg-color\',
    \'container_inclusive\' => false,
    \'render_callback\' => \'dummy_function\',
) );
演示技术的独立插件:https://gist.github.com/westonruter/e8cf3c1c5abdbd123b65459fdaa74b5e

演示视频:

Screenshot of partial and control

结束

相关推荐