我可以根据预览的页面在Customizer中更改控件的传输吗?

时间:2018-02-06 作者:Joy Reynolds

我有一个主题,可以为生成的摘录设置摘录长度。根据预览页面是否显示摘录,自定义程序是否有办法有条件地更改传输机制?

例如,我有另一个选项,可以控制归档页面上显示的是完整内容还是摘录,但搜索页面始终显示摘录。因此,如果没有预览摘录,我宁愿不进行整个页面刷新,但如果是搜索页面或其他选项设置为显示摘录,我需要在更改摘录长度时使用刷新。

或者这是否值得花费额外的代码?

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

是的,您可以更改transport 在页面加载后动态创建已注册设置的。实际上active_callback 可以与JS结合使用来更改transport 而不是导致控件隐藏。

假设您已注册ID为的控件excerpt_length, 您已注册设置和控件,如下所示:

$wp_customize->add_setting( \'excerpt_length\', array(
    \'transport\'         => \'refresh\',
    \'sanitize_callback\' => function( $value ) {
        return intval( $value );
    },
) );

$wp_customize->add_control( \'excerpt_length\', array(
    \'label\'           => __( \'Excerpt length\', \'example\' ),
    \'section\'         => \'something\',
    \'type\'            => \'number\',
    \'active_callback\' => function() {
        // Admin check is for initial state in customize.php.
        return is_admin() || is_archive() || ( is_home() && ! is_front_page() );
    },
) );
然后,您可以为Customizer controls应用程序(位于customize_controls_enqueue_scripts) 当active 状态更改,如切换设置的transport 什么时候active 状态更改,而不是切换控件的可见性:

wp.customize.control( \'excerpt_length\', function( control ) {
    control.onChangeActive = function( active ) {
        control.setting.transport = active ? \'refresh\' : \'postMessage\';
    };
} );
有其他方法可以做到这一点,但这可能是最少的代码量。

SO网友:ghoul

我没有找到任何解决办法。但我建议你使用active_callback 参数,如果控制完整内容或摘录的另一个选项显示完整内容,并且预览的页面不是搜索页面,则隐藏控制摘录长度的控件。

我想这将是更好的方法,因为您确实希望根据预览的页面显示相关控件。

结束

相关推荐

从使用get_the_excerpt()检索的摘录中删除省略号

我使用一个自定义的WP\\u查询在没有主循环的页面上显示一个包含最近帖子的旋转木马。在WP\\u查询循环中,我使用get_the_excerpt() 检索这些帖子的自动生成摘录。这些帖子没有自定义摘录集,也没有<!--more--> 标签然而,这些生成的摘录包含一个尾部省略号(...) (不是实际的省略号,而是三个点)结尾。根据所有相关帖子和抄本,我应该能够通过在excerpt_more 钩我将此代码添加到functions.php:add_filter(\'excerpt_more\', \