पोस्ट को श्रेणी और टैग से कैसे क्वेरी करें?


11

मैं उन पोस्ट की सूची दिखाने का प्रयास कर रहा हूं जो श्रेणी X और टैग Y से संबंधित हैं। मैंने निम्नलिखित कोड की कोशिश की है:

$args = array(
    'posts_per_page' => 4,
    'tag_id' => $tag_id,
    'cat' => $cat_id,
);
query_posts($args);

लेकिन यह सही ढंग से काम नहीं करता है और co \ ategory में सभी पदों को लौटाता है।

आपके पास किसी भी जानकारी को सुनना पसंद करेंगे


मुझे लगता है कि आप query_posts () के साथ केवल श्रेणी या टैग का उपयोग कर सकते हैं। मुझे यकीन नहीं है, लेकिन शायद फ़ंक्शन का उपयोग सीमित है, जिसका मतलब होगा कि यह सही ढंग से काम कर रहा है लेकिन यह वह नहीं करता है जो आप इसे करना चाहते हैं।
हकेरे

जवाबों:


19

संपादित करें: श्रेणी और टैग चौराहों को क्वेरी करने के उचित तरीके के लिए नीचे देखें।

global $wp_query;
        $args = array(
        'category__and' => 'category', //must use category id for this field
        'tag__in' => 'post_tag', //must use tag id for this field
        'posts_per_page' => -1); //get all posts

$posts = get_posts($args);
        foreach ($posts as $post) :
  //do stuff 
     endforeach;

3

मुझे लगता है कि यह वर्डप्रेस में बग है जिसे कहीं और पर टिप्पणी की गई है, आईडी के बजाय टैग के नाम का उपयोग करने का प्रयास करें, फिर उसे काम करना चाहिए:

$args = array(
    'posts_per_page' => 3,
    'tag' => 'review',
    'cat' => 9,
);
query_posts($args);

हमें बताएं कि आप कैसे प्राप्त करेंगे, यह निश्चित नहीं है कि नाम में कई शब्दों के साथ टैग क्या होता है।


2

मैं इसी मुद्दे में ठोकर खाई और एक MySQL अनुरोध करके इसे हल किया।

संक्षेप में: get_post ($ args) आपको वे पोस्ट लौटाएगा जिनके पास श्रेणी = MyCategory या टैग = MyTag है।

आप जो चाहते हैं, वह अपने OR को AND में बदल देना है ।

मेरा तर्क एक MySQL क्वेरी के साथ सीधे जाना था:

  • प्रश्न 1 = उन सभी पदों का चयन करें जिनके पास श्रेणी MyCat है
  • क्वेरी 2 = उन सभी पदों का चयन करें जिनके पास MyTag टैग है
  • अंतिम रूप से: उन सभी पदों का चयन करें जो क्वेरी 1 और क्वेरी 2 में हैं।

मैंने query_post () के बजाय wpdb का उपयोग किया ;

थोड़ा कोड (श्रेणी MyCat और टैग MyTag के साथ प्रकाशित पोस्ट लौटना) :

    $query_byTag="
            SELECT wp_posts.ID
            FROM wp_posts, wp_term_relationships, wp_terms
            WHERE wp_posts.ID = wp_term_relationships.object_id
            AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id
            AND wp_terms.name = 'MyTag'";

    $query_byCat="
            SELECT wp_posts.ID
            FROM wp_posts, wp_term_relationships, wp_terms
            WHERE wp_posts.ID = wp_term_relationships.object_id
            AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id
            AND wp_terms.name = 'MyCat'";

$query ="
            SELECT      wp_posts.post_title AS title , 
                        wp_posts.post_content AS content,
                        wp_posts.post_date AS blogdate 
            FROM wp_posts
            WHERE wp_posts.post_status = 'publish'
            AND wp_posts.ID IN (".$query_byTag.")
            AND wp_posts.ID IN (".$query_byCat.")
            ORDER BY wp_posts.post_date DESC ";

$result= $wpdb->get_results($query);

यह करने के लिए एक गंदा तरीका है, लेकिन मुझे आशा है कि यह मदद करता है =)


7
यह और अधिक आसानी से WP_Queryऔर एक tax_queryरिश्ता के साथ पूरा किया जाता है , कच्चे SQL के लिए कोई ज़रूरत नहीं है।
मिलो

इसे प्राप्त करने के लिए वर्डप्रेस में कच्चे प्रश्नों को करने की बिल्कुल आवश्यकता नहीं है।
Drmzindec

2

यह कोड काम करता है:

$args = array(
    'tag' => get_queried_object()->slug, // If permalink like example.com/tag/example-tag, etc.
    'posts_per_page' => -1,
    'tax_query' => array( 
        array(
            'taxonomy' => 'category', // Taxonomy, in my case I need default post categories
            'field'    => 'slug',
            'terms'    => 'interior', // Your category slug (I have a category 'interior')
        ),
        ) 
); // Get all posts
$posts_new = get_posts( $args );

-1
SELECT wp_posts.post_name
FROM wp_posts, wp_term_relationships, wp_terms, wp_term_taxonomy
WHERE wp_posts.ID = wp_term_relationships.object_id
AND wp_terms.term_id = wp_term_taxonomy.term_id
AND wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id
AND wp_terms.name = "MY TAG"

2
कोड केवल उत्तर शायद ही कभी गुणवत्ता मानकों को पूरा करते हैं। कृपया अपने उत्तर को संपादित करें और इसमें नोट्स / टिप्पणी शामिल करें कि यह मूल मुद्दे के साथ-साथ इसे कैसे / कहां लागू करना है।
Howdy_McGee

यह बहुत आसानी से WP_Query और एक कर_क्वायरी और संबंध के साथ पूरा किया जाता है, कच्चे SQL की कोई आवश्यकता नहीं है।
Drmzindec
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.