16

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

但是,在我使用 $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 专业人士都可以阐明这一点吗?

提前致谢 !

4

4 回答 4

20

在这里找到了答案 - 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 );
于 2015-06-27T15:22:56.730 回答
18

试试这个

$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();
于 2012-09-05T01:09:21.093 回答
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

于 2017-03-11T13:05:15.143 回答
0

花了我一段时间。这就是您如何从帖子中获得 3 个具有相同标签的随机帖子

$post = get_post(); // if you don't have $post->ID already
$tag_ids = wp_get_post_tags( $post->ID, array( "fields" => "ids" ) ); // current tags
$args = array(
    "numberposts" => 3,
    "orderby" => "rand",
    "post__not_in" => array( $post->ID ), //exclude current
    "tax_query" => array(
        array(
            "taxonomy" => "post_tag",
            "field"    => "term_id",
            "terms"    => $tag_ids
        )
    )
);
$posts = get_posts( $args ); // getting posts
于 2022-02-07T21:58:05.333 回答