2012-09-05 53 views
8

我写了一些代码,它会自动创建一些帖子并向他们添加标签。我可以在“所有帖子”管理面板中看到这些标签,并且可以点击帖子的“标签”链接以获取带有标签的帖子。WordPress的:试图通过标记获得帖子

但是,在我使用$ wp_query编写的插件中,无论我传入什么参数,我都会返回完整的帖子列表,看它们是否有我正在查找的标签。

这里是我的代码:

// Now retrieve all items matching this brand name . . . 
$query=new WP_Query(array('posts_per_page=5', array('tag' => array($brand_name)))); 

// The Loop 
while ($query->have_posts()) : $query->the_post(); 
    echo '<li>'; 
    the_title(); 
    echo '</li>'; 
endwhile; 

// Reset Post Data 
wp_reset_postdata(); 

这将产生10个结果时,我已经告诉它只能返回5.在现实中,我应该只得到2回发因为这是与标签的总数。

环顾网络上似乎有很多人有同样的问题,但没有解决方案。我必须尝试过10种指定标签的不同方式,但返回的帖子数量是错误的这一事实表明我得到了完全错误的东西或者存在某种错误。 WordPress的版本是3.4.1,如果有帮助。

任何WordPress的专业人士可以在这个光?

在此先感谢!

回答

13

试试这个

$original_query = $wp_query; 
$wp_query = null; 
$args=array('posts_per_page'=>5, 'tag' => $brand_name); 
$wp_query = new WP_Query($args); 
if (have_posts()) : 
    while (have_posts()) : the_post(); 
     echo '<li>'; 
     the_title(); 
     echo '</li>'; 
    endwhile; 
endif; 
$wp_query = null; 
$wp_query = $original_query; 
wp_reset_postdata(); 
+0

不应该有任何理由恢复原来的$ wp_query和周围尽一切跳舞。只需将它分配给一个新的变量。 –

+0

@SheikhHeera整个$ original_query,重置postdata等 –

+0

@ArtemRussakovskii,在这种情况下,我不能使用'$ wp_query'变量但是不同的一个,例如'$ new_wp_query = new WP_Query($ args); while $ new_wp_query-> have_posts()):the_post(); ...'。 –

12

了答案这里找到 - https://codex.wordpress.org/Template_Tags/get_posts

下面的示例显示帖子标记为 '爵士',在 '风格' 自定义分类,使用 'tax_query'

$args = array(
    'tax_query' => array(
     array(
      'taxonomy' => 'genre', 
      'field' => 'slug', 
      'terms' => 'jazz' 
     ) 
    ) 
); 
$postslist = get_posts($args); 

所以对你来说将是

$args = array( 
     'posts_per_page' => 5, 
     'tax_query'  => array(
      array(
       'taxonomy' => 'post_tag', 
       'field'  => 'slug', 
       'terms'  => sanitize_title($brand_name) 
      ) 
     ) 
    ); 

$postslist = get_posts($args); 
0

在您的代码,请尝试:

$query=new WP_Query(array('posts_per_page=5', 'tag' => $brand_name)); 

代替:

$query=new WP_Query(array('posts_per_page=5', array('tag' => array($brand_name)))); 

有关进一步详情,请参阅https://codex.wordpress.org/Class_Reference/WP_Query#Tag_Parameters (和提到的最近重复的帖子)。

注意: $ brand_name可能是一个字符串或逗号分隔值等数组,并且上面的代码应该可以工作。

或者,尝试:

$myPosts = get_posts(array('tag' => $brand_name)); 

https://codex.wordpress.org/Template_Tags/get_posts

相关问题