Wordpress 显示带有分类法/类别短代码的自定义帖子类型

Wordpress 显示带有分类法/类别短代码的自定义帖子类型,wordpress,custom-post-type,shortcode,custom-taxonomy,Wordpress,Custom Post Type,Shortcode,Custom Taxonomy,我正在创建一个快捷码函数,它将显示一个自定义的帖子类型,并且可以根据其类别/分类进行过滤。我已经知道了如何创建短代码并让它显示帖子类型。但我无法让它显示相关的分类类别 我创建了一个名为“推荐”的自定义帖子类型,然后创建了一个名为“推荐类别”的分类法。在这个分类法中,我有一个类别叫做“推荐性家庭” 我希望能够使用带有“推荐主页”的短代码作为其过滤器,以便显示主页推荐 我的短代码在没有属性的情况下工作得很好:[列出推荐信]-这将显示所有推荐信。但当我添加:[列出推荐类别=“推荐主页”]时,不会显示任

我正在创建一个快捷码函数,它将显示一个自定义的帖子类型,并且可以根据其类别/分类进行过滤。我已经知道了如何创建短代码并让它显示帖子类型。但我无法让它显示相关的分类类别

我创建了一个名为“推荐”的自定义帖子类型,然后创建了一个名为“推荐类别”的分类法。在这个分类法中,我有一个类别叫做“推荐性家庭”

我希望能够使用带有“推荐主页”的短代码作为其过滤器,以便显示主页推荐

我的短代码在没有属性的情况下工作得很好:[列出推荐信]-这将显示所有推荐信。但当我添加:[列出推荐类别=“推荐主页”]时,不会显示任何内容

我被难住了。我离得很近,我确信我忽略了一些非常明显的东西。非常感谢您的帮助!谢谢

下面是我的快捷码函数:

//创建带有参数的短代码,以便用户可以定义查询的内容-默认情况下列出所有博客文章

    add_shortcode( 'list-testimonials', 'post_listing_parameters_shortcode' );
    function post_listing_parameters_shortcode( $atts ) {
    ob_start();

    // define attributes and their defaults
    extract( shortcode_atts( array (
        'type' => 'testimonials',
        'order' => 'date',
        'orderby' => 'title',
        'posts' => -1,
        'category' => '',
    ), $atts ) );

    // define query parameters based on attributes
    $options = array(
        'post_type' => $type,
        'order' => $order,
        'orderby' => $orderby,
        'posts_per_page' => $posts,
        'category_name' => $category,
    );
    $query = new WP_Query( $options );
    if ( $query->have_posts() ) { ?>
    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
    <div
        class="small-12 medium-12 large-4 columns testimonial-column homepage-    testimonial-column">

        <!--HOME PAGE SINGLE TESTIMONIAL CONTAINER-->
        <div
            class="testimonial-container homepage-testimonial-container"  
            id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

            <!--HOME PAGE SINGLE TESTIMONIAL TEXT-->
            <?php if( get_field('testimonial_text') ): ?>
            <div
                 class="testimonial testimonial-textarea">
                    <?php the_field('testimonial_text'); ?>   
            </div>
            <?php endif ?>
            <!--END HOME PAGE SINGLE TESTIMONIAL TEXT-->

            <!--HOME PAGE SINGLE TESTIMONIAL DETAILS-->
            <div
                 class="testimonial-details">

                <!--HOME PAGE SINGLE TESTIMONIAL IMAGE-->
                <?php if( get_field('testimonial_photo') ): ?>
                <img
                     src="<?php the_field('testimonial_photo'); ?>"
                     class="testimonial-photo" />
                <?php endif ?>

                <!--HOME PAGE SINGLE TESTIMONIAL BIO INFO-->
                <div
                    class="testimonial-bio">

                    <!--HOME PAGE SINGLE TESTIMONIAL NAME-->
                    <?php if( get_field('testimonial_name') ): ?>
                    <h5
                        class="testimonial-name">
                            <?php the_field('testimonial_name'); ?> 
                    </h5>
                    <?php endif ?>
                    <!--END HOME PAGE SINGLE TESTIMONIAL NAME-->

                    <!--HOME PAGE SINGLE TESTIMONIAL TITLE-->
                    <?php if( get_field('testimonial_title') ): ?>
                    <p
                       class="testimonial-title">
                           <?php the_field('testimonial_title'); ?>
                    </p>
                    <?php endif ?>
                    <!--END HOME PAGE SINGLE TESTIMONIAL TITLE-->

                    <!--HOME PAGE SINGLE TESTIMONIAL COMPANY-->
                    <?php if( get_field('testimonial_company') ): ?>
                    <p
                       class="testimonial-company">
                           <?php the_field('testimonial_company'); ?>
                    </p>
                    <?php endif ?>
                    <!--END HOME PAGE SINGLE TESTIMONIAL COMPANY-->

                </div>
                <!--END HOME PAGE SINGLE TESTIMONIAL BIO INFO-->

            </div>
            <!--END HOME PAGE SINGLE TESTIMONIAL DETAILS-->

    </div>
    <!--END HOME PAGE SINGLE TESTIMONIAL CONTAINER-->
    </div>
    <!--HOME PAGE TESTIMONIALS COLUMN-->

        <?php endwhile;
        wp_reset_postdata(); ?>
<?php $myvariable = ob_get_clean();
return $myvariable; 
   }    
}
add_-shortcode('list-commentials','post_-listing_-parameters_-shortcode');
函数post_列表_参数_短代码($atts){
ob_start();

//定义属性及其默认值 提取(短码)附件(数组)( '类型'=>'推荐', “订单”=>“日期”, 'orderby'=>'title', “posts”=>-1, '类别'=>'', )美元(附件);; //基于属性定义查询参数 $options=array( “post_type”=>$type, “订单”=>$order, 'orderby'=>$orderby, “每页帖子”=>$posts, “类别名称”=>$category, ); $query=新的WP\U查询($options); 如果($query->have_posts()){?> 我会首先(如果您还没有)确保查询“在活体内”工作,也就是说,它本身在页面上(而不是作为一个快捷码)。然后从那里进行迭代。由于自定义分类法使用的函数和键名称与类别不同,因此首先测试这一点很重要。此外,要过于迂腐:当引用自定义分类法时,类别的术语是术语或术语

值得一提的是,一个原始的自定义post类型循环示例:

<?php
$args = array(
    'posts_per_page' => -1,
    'post_type' => 'testimonials', // This is the CPT's slug!
    'tax_query' => array(
        array(
            'taxonomy' => 'testimonial-category', // This is the taxonomy's slug!
            'field' => 'slug',
            'terms' => array('testimonial-home') // This is the term's slug!
        )
    ),
    'order' => 'ASC',
    'orderby' => 'menu_order'
  );
$my_query = new WP_Query( $args );

if($my_query->have_posts()): 
  while($my_query->have_posts()): $my_query->the_post(); ?>
      <li>
        <h3><?php the_title(); ?></h3>
        <?php if($thumbnail): ?>
          <img src="<?php echo $thumbnail[url]; ?>" />
        <?php endif; ?>
        <p><?php the_content(); ?></p>
      </li>
  <?php endwhile; // End while $my_query->have_posts
endif; // End if $my_query->have_posts

wp_reset_postdata(); ?>

永远不要使用
extract()
。这确实有问题,而且调试起来非常困难,因为它会动态地左右创建变量并居中。出于这些原因,它已从core和codex中删除。请永远不要使用
extract()
。我想补充一点,您确定您使用的是内置类别还是自定义分类法?我使用的是自定义分类法?这就是问题所在吗?我是否称之为错误?我将如何称之为自定义分类法?那么我的短码看起来会像[列表推荐分类法=“家庭推荐分类法”]…?我已经尝试过了,但是没有用。但是我的快捷码函数中没有包含这一点。所以我会改为执行以下操作…//定义属性及其默认值提取(快捷码(数组('type'=>'推荐信','order'=>'日期','orderby'=>'标题','posts'=>-1,'taxonomy'=>''),$atts));//基于属性定义查询参数$options=array('post\u type'=>$type,'order'=>$order,'orderby'=>$orderby,'posts\u per\u page'=>$posts,'taxonomy\u name'=>$category,);我还认为OP使用的是自定义分类法,而不是内置分类法
类别
;-)