wordpress - 显示带有分类/类别简码的自定义帖子类型

标签 wordpress custom-post-type shortcode custom-taxonomy

我正在创建一个短代码函数,该函数将显示自定义帖子类型并可按其类别/分类法进行过滤。我已经弄清楚如何创建短代码并让它显示帖子类型。但我无法让它显示关联的分类类别。

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

我希望能够使用以“testimonial-home”作为过滤器的简码来显示主页推荐。

我的短代码在没有属性的情况下效果很好:[list-testimonials] - 这显示所有推荐。但是当我添加: [list-testimonials Category="testimonial-home"] 时,什么也没有显示。

我被难住了。我距离如此之近,我确信有一些非常明显的东西被我忽略了。非常感谢任何和所有的帮助!谢谢!

这是我的简码函数:

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

    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; 
   }    
}

最佳答案

我将首先(如果您还没有)确保查询“体内”工作,即在页面上单独工作(而不是作为短代码)。然后从那里迭代。由于自定义分类法使用与类别不同的​​一系列不同的函数和键名称,因此首先测试这一点很重要。另外,要说得过于迂腐:当提到自定义分类时,类别的术语是术语或术语。

对于它的值(value),一个原始的自定义帖子类型循环示例:

<?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(); ?>

关于wordpress - 显示带有分类/类别简码的自定义帖子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31738252/

相关文章:

javascript - bootstrap-slider链接输入数字与幻灯片变化

mysql - 优化表后,Wordpress/MySQL (InnoDB) 表几乎瞬间碎片化?

html - 如何删除网页底部的空白区域?

javascript - 使用 jQuery.load() 查询自定义帖子类型

php - get_the_content 无法在短代码中工作

php - 用于显示 : "Buy X more products to get a discount" 的 ajaxify 消息的 WooCommerce 短代码

php - 如何将变体库存状态添加到 Woocommerce 产品变体下拉列表

php - 自定义帖子类型的日期存档

php - 仅将列添加到 WordPress 管理员的帖子,而不是自定义帖子类型

php - 正则表达式将嵌套短代码转换为数组