WP_Query এ একাধিক ট্যাক্স_কোয়ারির জন্য একাধিক সম্পর্ক


10

আমি WP_Query()আমার কিছু পোস্ট ফিল্টার করতে ক্লাসটি ব্যবহার করতে চাই । আমি এখন যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল বিভাগের ক্যোয়ারি পরিচালনা করছে। সাধারণত, (আর ওআর বা ওআর) WP_Query()একমাত্র সম্পর্ককেই পরিচালনা করে তবে tax_query()আমার যা প্রয়োজন তা হল এই সম্পর্কের মিশ্র ব্যবহার tax_query(), কীভাবে এটি অর্জন করতে পারে?
যেমন

'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'taxonomy1',
            'field' => 'slug',
            'terms' => array( $term)
        ),
        array(
            'taxonomy' => 'taxonomy3',
            'field' => 'slug',
            'terms' => 'terms' => array( $term3),
            'operator' => 'IN',
        )
       // below i want to use OR relationship
       'relation' => 'OR',
      array(
            'taxonomy' => 'taxonomy4',
            'field' => 'slug',
            'terms' => array( $term4)
        ),
        array(
            'taxonomy' => 'taxonomy2',
            'field' => 'slug',
            'terms' => 'terms' => array( $term2),
            'operator' => 'IN',
        )
    )  

আমি জানি যে উপরের কোডটি কাজ করছে না, WP_Query()এটি করার জন্য আমার কি ফিল্টার ব্যবহার করা দরকার? কোন ধারণা?

উত্তর:


10

এটি স্লাগের পরিবর্তে শব্দ_ট্যাক্সনমি_আইডি ব্যবহার করে করা যেতে পারে, যা কার্যকরভাবে কোন শ্রেণীবদ্ধ নির্দিষ্ট করে তা উপেক্ষা করবে এবং কেবলমাত্র অনন্য শব্দ_ট্যাক্সনমি_আইডি ক্ষেত্রটি দেখুন। এটি আপনাকে কার্যকরভাবে একটি মিশ্র সম্পর্ক করতে সক্ষম করবে। আপনি ও এর সামগ্রিক সম্পর্ক ব্যবহার করতে চান এবং আইএন অপারেটরটি ব্যবহার করে একটি আইটেমে সম্পর্কিত হওয়া উচিত এমন সমস্ত শর্তাদি। আপনাকে প্রথমে তাদের টার্ম_ট্যাক্সনমি_আইডসের পছন্দসই শর্তগুলি ম্যাপ করতে হবে।

$taxes = array( 'taxonomy1', 'taxonomy2', 'taxonomy3', 'taxonomy4' );

foreach ( $taxes as $tax ) {
    $terms = get_terms( $tax );

    foreach ( $terms as $term )
        $tax_map[$tax][$term->slug] = $term->term_taxonomy_id;
}


$args['tax_query'] => array(
    'relation' => 'AND',
    array(
        'taxonomy' => 'taxonomy1',
        'field' => 'term_taxonomy_id',
        'terms' => array( $tax_map['taxonomy1'][$slug] )
        'operator' => 'IN',
    ),
    array(
        'taxonomy' => 'taxonomy3',
        'field' => 'term_taxonomy_id',
        'terms' => array( $tax_map['taxonomy3'][$slug] ),
        'operator' => 'IN',
    ),
    array(
        'taxonomy' => 'taxonomy4', // gets ignored
        'field' => 'term_taxonomy_id',
        'terms' => array( $tax_map['taxonomy4'][$slug], $tax_map['taxonomy2'][$slug] ),
        'operator' => 'IN',
    ),
);

নোট করুন যে প্রাক-3.5, আপনাকেও উল্লেখ করতে হবে 'include_children' => false। এই ট্র্যাকের টিকিটটি আরও দেখুন: https://core.trac.wordpress.org/ticket/21228


6
যাইহোক, দয়া করে ক্ষমা করুন এবং যেকোন ভুল / ত্রুটি সম্পর্কে আমাকে সতর্ক করুন :) এই সমস্তটি অন্য হাতে একটি শিশুর সাথে এক হাতে টাইপ করুন।
হেলেন হাজারী

1
কোথা $slugথেকে আসে ...?
ভ্যানকোডার

1
কোডে কেবল একটি স্থানধারক। আমার ধারণা এটি মূল প্রশ্নের মধ্যে $ টার্ম 1 ইত্যাদি ছিল।
হেলেন হাজারী

তুমি ঠিক! এই পদ্ধতিটি কাজ করছে বলে মনে হচ্ছে। আমি এটি পরীক্ষা দিয়ে দেব, এবং যদি এই উত্তরটি কাজ করে থাকে তবে ভোট দিতে ফিরে আসব। ধন্যবাদ
রন_দেব

দেখে মনে হচ্ছে 'taxonomy' => 'taxonomy4', // gets ignoredএড়ানো যায় না। আমি যদি এই ক্ষেত্রটিতে এলোমেলো পাঠ্য রাখি তবে কোনও ফলাফল পাওয়া যায় নি। কেবলমাত্র যখন আমি প্রকৃত শৈলীর নাম অর্পণ করি, তা আমাকে ফলাফল দেয়। কোন ধারণা কেন?
রন_দেব

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.