Wordpress:试图通过标签获取帖子

时间:2012-09-05 00:22:50

标签: wordpress tags

我写了一些代码,会自动创建一些帖子并为其添加标签。我可以在“所有帖子”管理面板中看到这些标签,然后点击帖子“标记”链接即可获得带有标记的帖子。

然而,在我使用$ 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();

当我告诉它只返回5时,这会产生10个结果。实际上我应该只收到2个帖子,因为这是带标签的总数。

在网上浏览似乎有很多人遇到同样的问题,但没有解决方案。我一定尝试了大约10种不同的方式来指定标签但事实上返回的帖子数量是错误的,这表明我要么完全错了,要么存在某种错误。如果有帮助,Wordpress版本为3.4.1。

任何Wordpress专业版都可以解释这个吗?

提前致谢!

3 个答案:

答案 0 :(得分:15)

试试这个

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

答案 1 :(得分:14)

在此处找到答案 - https://codex.wordpress.org/Template_Tags/get_posts

  

以下示例显示标有'jazz'的帖子,在'genre'下   自定义分类,使用'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 );

答案 2 :(得分: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