WordPress:尝试通过标签获取帖子

xjreopfe  于 2023-03-29  发布在  WordPress
关注(0)|答案(5)|浏览(195)

我写了一些代码,可以自动创建一些帖子,并为它们添加标签。我可以在“所有帖子”管理面板中看到标签,我可以点击帖子的“标签”链接来获取带有标签的帖子。
然而,在我使用$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种不同的方法来指定标签,但事实上,返回的帖子数量是错误的,这表明我要么完全错了,要么有某种bug。WordPress版本是3.4.1,如果它有帮助。
有哪位Wordpress Pro能帮我们解决这个问题吗?
先谢了!

zte4gxcn

zte4gxcn1#

答案在这里找到-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 );
tjvv9vkg

tjvv9vkg2#

试试这个

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

e4eetjau3#

在你的代码中,尝试:

$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

cetgtptt

cetgtptt4#

花了我一段时间。这是你如何从一个帖子中随机获得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
    "post_type" => "article", // defaults to "post", also note "any" option
    "tax_query" => array(
        array(
            "taxonomy" => "post_tag",
            "field"    => "term_id",
            "terms"    => $tag_ids
        )
    )
);
$posts = get_posts( $args ); // getting posts

如果它仍然不起作用,您可以查看$args生成SQL请求以进一步排除故障

$q = new WP_Query($args);
echo $q->request;
mqxuamgl

mqxuamgl5#

SELECT SQL_CALC_FOUND_ROWS wpwg_posts.标识符FROM wpwg_posts WHERE 1=1 AND wpwg_posts.标识符不在(0)AND(0 = 1)AND((wpwg_posts.post_type = 'p' AND(wpwg_posts.post_status = 'publish' OR wpwpwg_posts.post_status = 'private'))分组依据wpwg_posts.标识符排序依据兰德()限制0,10
这个sql请求,我仍然无法看到的职位

相关问题