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使用的是自定义分类法,而不是内置分类法类别
;-)