custom query to get posts

I want to create custom links like

mydomain.com/custom_page/cat=ABCtag=XYZ

So that when a user clicks on the link s/he can see all posts in the category 'ABC' having tag 'XYZ'

For this I've created a custom template with the following code

?php
/*
Template Name: MyCustomTemplate
*/
?

?php get_header(); ?
global $wp_query;
get_query_var( 'cat' );
get_query_var( 'tag' );
?php get_footer(); ?

I don't know how to query for the posts in the category 'ABC' with the tag 'XYZ'

I checked http://codex.wordpress.org/Function_Reference/query_posts#Passing_variables_to_query_posts

but the examples shown there use 'static' values. I need to query using dynamic values: which are passed via the URL.

Also, I'm using a plugin 'Advanced Custom Fields' and have added a field 'priority' with the defult value 'Z'. I intend to assign one alphabet to each post in the priority field, so that results on the page are served sorted according to "priority" : Posts with the priority 'A' on the top, followed by posts with priority 'B' and so on..

In Short:

I want to get category and tag parameters from links like:

mydomain.com/custom_page/cat=some_categorytag=some_tag

Then Fetch posts in the category 'some_category' AND having tag 'some_tag' AND sorted according to custom field : 'priority'

Topic wp-query query-posts query Wordpress

Category Web


You can get variables from $_REQUEST, but you must first reset permalinks to default format and make sure this is correct variable names. In your case it's $_REQUEST['cat'] and $_REQUEST['tag'], so the dynamic query will be

$args = array(
  'post_type' => 'post',
  'category_name' => sanitize_title_for_query( $_REQUEST['cat'] ),
  'tag' => sanitize_title_for_query( $_REQUEST['tag'] ),
  'meta_key' => 'priority',
  'orderby' => 'meta_value_num'
);

Clarification of your question:
You want to show Posts of a certain category named "ABC" AND also you want to filter the posts with the tag named "XYZ".

Answer:
If this is the scenario, have you tried: WP_Query()?

<?php    
// The Query

$args = array('post_type' => 'post',
              'category_name' => 'ABC',
              'tag' => 'XYZ',
              'meta_key' => 'priority',
              'orderby' => 'meta_value_num'
             );

$the_query = new WP_Query($args);

// The Loop
if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>

Something like this may solve your problem.

NOTE: I din't test this one, try yourself with it. If you face any problem, please comment here, or if you find any solution, don't forget to share that with me here.

Thanks.

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.