WordPress - producing a list of posts filtered by

2019-02-07 06:16发布

问题:

I'm trying to make a WordPress site that has six lists on a page, each list showing posts from a different category. Simple.

But then, if a user selects a tag, taking them to that tag archive page, I want them to still see the six-list template, but all the posts within each category are also filtered by the tag. So lists of posts are filtered first by tag, and then by category.

As far as I can tell, there is no way of doing this using query_posts or anything, it needs more advanced use of the database, but I have no idea how to do this! I think that there's a similar question on here, but because I know very little PHP and no MySQL, I can't make sense of the answers!

回答1:

Right, I have finally found a relatively simple solution to this.

There's a bug in WordPress preventing a query of both category and tags working, so query_posts('cat=2&tag=bread'); wouldn't work, but a way around this is query_posts('cat=2&tag=bread+tag=bread'); which magically works.

In a tag.php template, I wanted it to pick up the tag from that archive, so I had to do this:

<?php query_posts('cat=12&tag='.$_GET['tag'].'+'.$_GET['tag']); ?>

which works perfectly.



回答2:

Try this code:

query_posts('tag=selected_tag');

while (have_posts()) : the_post();


    foreach((get_the_category()) as $category)
        { 

        if ($category->cat_name == 'selected_category')
            {
            // output any needed post info, for example:
            echo the_title();
            }

        }


endwhile;


回答3:

According to the Wordpress API, you can filter by tags within a call to query_posts.

Examples:

query_posts('tag=cooking');

query_posts('tag=bread,baking');

query_posts('tag=bread+baking+recipe');