我创建了一个自定义的帖子类型,名为;al\\U产品“;并附加了一个自定义分类法,称为;产品类别;。
在我的archive-product\\u类别中。php我有以下(相关)代码:
if ( $termchildren ) {
// we have kids...just show the terms.
$i=1;
foreach ( $termchildren as $child ) {
if ($i % 2 == 0) {
echo \'<div class="tax-entry flex">\';
} else {
echo \'<div class="tax-entry flex" style="flex-direction: row-reverse;">\';
}
?>
<figure class="wp-block-media-text__media">
<?php if ( get_field(\'product_category_img\', $child) ) echo wp_get_attachment_image( get_field(\'product_category_img\', $child), \'full\' ) ;?>
</figure>
<div style="flex:60% 0 0;" class="wp-block-media-text__content">
<h2><?php echo $child->name ;?></h2>
<p>
<?php
if (get_field(\'short_description\', $child )){
echo get_field(\'short_description\', $child );
}else{
echo $child->description;
}?>
</p>
<?php
// Get (at most) 2 "product" posts in the child term.
$posts = get_posts( array(
\'post_type\' => \'al_product\',
\'posts_per_page\' => 2,
$taxonomy_name => $child->slug,
) );
// If there\'s exactly 1 post, use the post permalink.
if ( 1 === count( $posts ) ) : ?>
<a class="button" href="<?php the_permalink( $posts[0] ); ?>">See this Product</a>
<?php // Else, use the term link.
else : ?>
<a class="button" href="<?php echo esc_url( get_term_link( $child, $taxonomy_name ) ); ?>">See this Series</a>
<?php endif; ?>
</div>
</div> <!-- END FLEX -->
<?php
$i++;
}
} else {
// no kids...show the products
echo \'<div class="productCategories grid">\';
while ( have_posts() ) : the_post();
?>
<div class="product_cat">
<a href="<?php the_permalink();?>">
<?php the_post_thumbnail(\'small\');?>
<h2><?php the_title();?></h2>
<?php
$subtitle = get_field(\'subtitle\');
if ( $subtitle ) {
echo \'<h3 class="entry-subtitle">\'.$subtitle.\'</h3>\';
}
?>
</a>
<?php //if (get_field(\'specs\')[\'part_number\']) echo \'<span>\'.get_field(\'specs\')[\'part_number\'].\'</span>\';?>
</div>
<?php
endwhile;
echo \'</div>\';
}
我要问的部分是当没有孩子的时候,所以我们展示产品。
目前,这是返回正确的产品,但按标题排序。我想按menu\\u顺序排序。
我将此添加到我的函数中。php:
add_action( \'pre_get_posts\', \'rt_change_product_sort_order\');
function rt_change_product_sort_order($query){
if(get_query_var( \'product_category\' )):
//Set the order ASC or DESC
$query->set( \'order\', \'DESC\' );
//Set the orderby
$query->set( \'orderby\', \'menu_order\' );
endif;
};
没用。我也尝试过替换;“如果”;以下各项的声明:
if(is_post_type_archive( \'product_category\' )):
if(get_query_var( \'product_category\' )):
if(get_query_var( \'al_product\' )):
我错过了什么?
最合适的回答,由SO网友:Sally CJ 整理而成
在我的archive-product\\u类别中。php我有这个(相关)代码
你确定那是正确的名字吗?因为对于post type 存档,应该是archive-al_product.php
对于taxonomy 存档页,应该是taxonomy-product_category.php
.
无论如何,(正如我在评论中所说)如果你想针对taxonomy 存档页,您应该使用is_tax()
, 或者如果是post type 存档页面,然后您将使用is_post_type_archive()
.
请注意is_post_type_archive()
一个或多个post类型名称/slug类似al_product
在你的情况下。因此,在您的代码/尝试中is_post_type_archive( \'product_category\' )
实际上是not 正确..=)
此外,您的帖子类型应具有has_archive
argument 设置为true
或者像鼻涕虫一样al-products
. 这样,当您访问example.com/?post_type=al_product
或example.com/al-products
, is_post_type_archive()
将返回true。
为了正确排序帖子(在WordPress主查询中),您可以尝试以下操作:
// In the rt_change_product_sort_order() function:
// Instead of using get_query_var(), you would use is_tax().
if ( is_tax( \'product_category\' ) ) :
// ... your code.
endif;
// Or use is_post_type_archive() to target the CPT archive.
if ( is_post_type_archive( \'al_product\' ) ) :
// ... your code.
endif;
// Or combine the conditional tags, if you want to:
if ( is_tax( \'product_category\' ) || is_post_type_archive( \'al_product\' ) ) :
// ... your code.
endif;
<额外资源
https://developer.wordpress.org/themes/basics/conditional-tags/