Wordpress shortcode Issue!

时间:2015-03-10 作者:bakar

您好,我开发了一个快捷码,根据分类术语列出自定义帖子类型中的帖子。但我有个问题。它显示来自所有术语的所有帖子,而不是被调用的术语
代码如下:

function course_listings( $atts ) {

// Attributes
extract( shortcode_atts(
    array(
        \'course_category\' => \'\',
    ), $atts )
);

// Code

$args = array(
    \'post_type\' => \'modules\',
    \'tax_query\' => array(
            \'taxonomy\' => \'courses\',
            \'field\' => \'slug\',
             \'terms\' => $course_category
        )
);

$mod_query = new WP_Query( $args );

$output=\'<div class="course-listings">\';

    while ( $mod_query->have_posts() ) {

        $mod_query->the_post();

        $output .=\'<ul>\';
        $output .=\'<li>\' .get_the_title(). \'</li>\';
        $output .=\'</ul>\';

    }

    wp_reset_postdata();
    $output .=\'</div>\';

    return $output;
}
add_shortcode( \'course\', \'course_listings\' );
我们将非常感谢您的帮助。

谢谢

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

这里有两个问题

切勿使用extract(). 它已经从核心功能中删除,这应该告诉你很多。有关更多信息,请查看this trac ticket #22400

您的tax_query 是不正确的,它应该是一个数组中的一个数组,您的只是一个数组

您的短代码应该是这样的

function course_listings( $atts ) 
{
    // Attributes
    $defaults = shortcode_atts( array(
        \'course_category\' => \'\',
    ), $atts );

    // Code

    $args = array(
        \'post_type\' => \'modules\',
        \'tax_query\' => array(
            array(
                \'taxonomy\' => \'courses\',
                \'field\'    => \'slug\',
                 \'terms\'   => $defaults[\'course_category\'],
            ),   
        ),
    );

    $mod_query = new WP_Query( $args );

    $output=\'<div class="course-listings">\';

    while ( $mod_query->have_posts() ) {

        $mod_query->the_post();

        $output .=\'<ul>\';
        $output .=\'<li>\' .get_the_title(). \'</li>\';
        $output .=\'</ul>\';

    }

    wp_reset_postdata();
    $output .=\'</div>\';

    return $output;
}
add_shortcode( \'course\', \'course_listings\' );
只有几点提示,您可能首先要检查在执行查询之前是否输入了术语

结束

相关推荐

Extending the Audio Shortcode

目前,音频快捷码只允许四个属性,src, loop, autoplay 和preload. 然而,当你上传一个音频文件时,它附带了非常有用的元数据,如专辑的艺术、艺术家、年份等,如果它也能显示出来,那就太好了。我一直在寻找一种扩展音频短代码的方法,以便元数据也可以包含在短代码中。到目前为止,我偶然发现shortcode_atts_{$shortcode} 它可以用来过滤现有的短代码,但显然只能过滤现有属性,不能添加新属性。顺便说一句,我并不想创建一个新的短代码,而是要添加或扩展现有的短代码,这样用户就不必