Overwriting a Shortcode

时间:2014-01-21 作者:Daniel Harris

我有一个扩展Visual Composer插件的主题,在首页上有一个滑块。滑块将显示来自五个不同客户的五份推荐信。我想在滑块中添加每个推荐信的特色图像作为缩略图。

以下是父主题的简短代码:

function jo_customers_testimonials_slider( $atts ) {
    extract( shortcode_atts( array( \'limit\' => 5, "widget_title" => __(\'What Are People Saying\', \'jo\'), \'text_color\' => "#000" ), $atts ) );
    $content = "";
    $loopArgs = array( "post_type" => "customers", "posts_per_page" => $limit, \'ignore_sticky_posts\' => 1 );

    $postsLoop = new WP_Query( $loopArgs );
    $content = "";

    $content .= \'...\';
    $content .= \'...\';
    $content .= \'...\';

    wp_reset_query();
    return $content;
}
add_shortcode( \'jo_customers_testimonials_slider\', \'jo_customers_testimonials_slider\' ); 
我的职能。php文件:

function jo_customers_testimonials_slider_with_thumbnail( $atts ) {
    extract( shortcode_atts( array( \'limit\' => 5, "widget_title" => __(\'What Are People Saying\', \'jo\'), \'text_color\' => "#000" ), $atts ) );
    $content = "";
    $loopArgs = array( "post_type" => "customers", "posts_per_page" => $limit, \'ignore_sticky_posts\' => 1 );

    $postsLoop = new WP_Query( $loopArgs );
    $content = "";

    $content .= \'...\';
    $content .= get_the_post_thumbnail( get_the_ID(), \'thumbnail\' );
    $content .= \'...\';
    $content .= \'...\';

    wp_reset_query();
    return $content;
}
add_shortcode( \'jo_customers_testimonials_slider\', \'jo_customers_testimonials_slider_with_thumbnail\' );
理论上,函数来自于我的函数。php文件应该覆盖父主题中的短代码。但当我使用此代码时,似乎什么都没有发生。我做错了什么?

Edit:
尝试了此代码,但仍然无法工作。

function wpa_add_child_shortcodes(){
remove_shortcode(\'jo_customers_testimonials_slider\');
    add_shortcode( \'jo_customers_testimonials_slider\', \'jo_customers_testimonials_slider_with_thumbnail\' );
}
add_action( \'after_setup_theme\', \'wpa_add_child_shortcodes\' );
也已更改
add_action( \'after_setup_theme\', \'wpa_add_child_shortcodes\' );
add_action( \'init\', \'wpa_add_child_shortcodes\' );
,但结果无差异。

Edit 2 (With Solution):

正在更改add_action( \'after_setup_theme\', \'wpa_add_child_shortcodes\' );add_action( \'wp_loaded\', \'wpa_add_child_shortcodes\' ); 解决了它。

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

子主题的functions.php 文件在父主题之前加载,因此您看到的行为是正确的。

请尝试在以后的操作中添加您的短代码:

function wpa_add_child_shortcodes(){
    add_shortcode( \'jo_customers_testimonials_slider\', \'jo_customers_testimonials_slider_with_thumbnail\' );
}
add_action( \'after_setup_theme\', \'wpa_add_child_shortcodes\' );

结束

相关推荐

在插件上实现phpunit测试

我刚刚完成了一个WordPress插件的编写,该插件基于从数据库中检索到的值(给定cookie上的id集),实现了基于快捷码标记的自动完成。该插件有多种可能的场景组合,基于以下参数:是否显示匹配字段是否将要显示的字段限制为某个最大值(匹配与否)是否在任何情况下显示特定字段集(如果匹配)看起来很简单,每次修改后都要测试所有场景,这让我很头疼(而且要花很多时间)。随着项目规模的扩大,我的承包商也对我的代码中不断出现的回归和遗漏的错误感到愤怒。所以,我的问题很简单:对于在WordPress中实现shortcod