基本上我有一个帖子类型“产品”和分类(“product_cat”),在这个帖子类型的单个视图中,我想要一个WP_Query
按照以下标准列出帖子:
我通过使用以下查询来实现此目的:
global $post;
$taxonomy = 'product_cat';
$have_you_read_query = new WP_Query(
array(
'posts_per_page' => 3,
'post_type' => 'product',
'post__not_in' => array($post->ID),
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => m_explode(get_terms($taxonomy), 'slug')
)
)
)
);
如果您想知道m_explode
函数在这里做了什么:
function m_explode(array $array, $key = '') {
if( !is_array($array) or $key == '') return;
$output = array();
foreach( $array as $v ) {
if( !is_object($v) ) {
return;
}
$output[] = $v->$key;
}
return $output;
}
我遇到的唯一问题是,当没有任何帖子附加任何“product_cat”条款时,会出现以下错误:
Notice: Undefined offset: 0 in C:\Users\Tom\Dropbox\Localhost\wordpress\wp-includes\query.php on line 2473
问题让我感到难过,这不是一个很大的问题,但它真的让我感到烦恼,所以如果有人有任何想法,我会非常感激。干杯!
答案 0 :(得分:1)
最后对此进行排序,以防万一有人需要它,这就是我最终使用的内容:
<?php
global $post;
$taxonomy = 'product_cat';
$terms = get_the_terms($post->ID, $taxonomy);
?>
<?php if ($terms && ! is_wp_error($terms)) : ?>
<?php
$terms_array = array();
foreach ($terms as $term) {
$terms_array[] = $term->slug;
}
$have_you_read_query = new WP_Query(
array(
'posts_per_page' => 3,
'post_type' => 'product',
'post__not_in' => array($post->ID),
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $terms_array
)
)
)
);
?>
<?php if($have_you_read_query->have_posts()) : ?>
<ul>
<?php while($have_you_read_query->have_posts()) : $have_you_read_query->the_post(); ?>
<li>
<?php the_title(); ?>
</li>
<?php endwhile; wp_reset_postdata(); ?>
</ul>
<?php endif; ?>
<?php endif; ?>
答案 1 :(得分:0)
使用isset
查看m_explode()
:
$terms = m_explode(get_terms($taxonomy), 'slug');
if( isset( $terms ) ){
// your query
}