it-swarm.asia

الحصول على تقاطع اثنين من شروط التصنيف المخصص لنوع المنشورات المخصصة؟

( ملاحظة المراقبين : كانت في الأصل بعنوان "كيفية الحصول على get_posts لنوع منشور مخصص موجود في تصنيفين مخصصين؟" )

لديّ نوع منشور مخصص له تصنيفان منفصلان ، أحدهما يسمى "نوع المشروع" والآخر يسمى "الحزمة" . أحتاج إلى الحصول على قائمة بالمشروعات ذات "نوع المشروع" A و "Package" A. حاولت استخدام الكود التالي:

$args = array(
  'post_type' => 'portfolio', 
  'numberposts' => -1, 
  'project_type' => 'A', 
  'package' => 'A'
); 
$my_posts = get_posts($args);  

ولكن هذا يحصل على جميع المنشورات التي هيإمافي نوع المشروع A OR Package A.

هل هناك أي طريقة لأقول في get_posts() أنني أريد أن أعيد فقط المشاركات الموجودة فيكلاهماالتصنيف؟

6
Shaun

اعتبارًا من الإصدار 1.3 ، يعمل استعلام التصنيفات المتعددة المكون الإضافي بشكل رائع مع WP_Query. الحجج الأصلي الخاص بك العمل كما هو.

$args = array(
'post_type' => 'portfolio',
'numberposts' => -1,
'project_type' => 'A',
'package' => 'A'
);

ثم قم بإجراء استعلام جديد وتحقق منه:

$foo = new WP_Query($args);
var_dump($foo->posts);

لقد اختبرت ذلك في إعداد التصنيف المخصص الخاص بي ، وأرجعت فقط المشاركات التي تطابق كلاهما المصطلحات في الاستعلام.

هناك طريقة أخرى مناسبة لاقتناص شروط التصنيف المتعددة مع QMT وهي بناء استعلامات URL بسيطة:

site.com/?post_type=portfolio&package=foo&project=bar

لقد استخدمت هذه الطريقة مع الدالة add_query_args() لإنشاء ارتباطات على صفحة تقوم بتعديل الاستعلام الحالي ، مع تحسينه بإضافة مصطلحات وتصنيفات إضافية. يعمل بناء الجملة أيضًا بشكل رائع مع إدخال البحث ، حيث يتم نشر كلمات متعددة في حقل الإدخال على شكل foo + bar ، والتي تعمل بشكل رائع مع QMT:

site.com/?post_type=portfolio&project=alpha&colors=red+blue+green

التي تُرجع فقط المشاركات التي تلبي الكل هذه المعايير - النوع: محفظة/مشروع: ألفا/ألوان: أحمر + أزرق + أخضر

4
somatic

مرحبًاshaun :

(Rarst محق في أنها تضيف هذه الوظيفة إلى WordPress v3.1 ، لكنها لن تكون هنا لفترة من الوقت وأنا متأكد أنك بحاجة إليها الآن. يمكنك محاولة الحصول على الكود الذي تعمل عليه ومحاولة جعله يعمل ، يمكنك استخدام المكوّن الإضافي كلاهما Rarst و somatic الذكر أو يمكنك فقط تضمين الشفرة التي تحتاجها في نسختك أدناه.

التعليمة البرمجية التالية عبارة عن ربط posts_where لإضافة متغير استعلام tax_terms مع قيمة التنسيق ((colon-commas)} حيث تكون القيم هي term slugs :

"{$varname1}:{$value1},{$varname2}:{$value2},...{$varnameN}:{$valueN}"

هذا .php قائم بذاته ، يمكنك الدخول إلى جذر موقع الويب الخاص بك لاختباره قبل سحب مكالمة add_action وظيفة tax_terms_where() في ملف functions.php الخاص بمظهرك (أو في ملف .php الخاص بأحد الإضافات الخاصة بك. )

<?php
/*
* Adds "tax_terms" to WP_Query()
*
* See: http://lists.automattic.com/pipermail/wp-hackers/2010-October/035258.html
* See: http://wordpress.stackexchange.com/questions/2255/
*
*/

  header('Content-Type:text/plain');
  include "wp-load.php";
  add_action('posts_where','tax_terms_where',10,2);

  $result = new WP_Query('post_type=portfolio&tax_terms=project_type:A,package:A');
  foreach($result->posts as $post) {
    echo "{$post->post_title}\n";
  }

function tax_terms_where($where,$wp_query) {
  if (isset($wp_query->query)) {
    $query = $wp_query->query;
    if (is_string($query))
      parse_str($query,$query);
    if (is_array($query) && isset($query['tax_terms'])) {
      global $wpdb;
      $tax_terms = explode(',',$query['tax_terms']);
      foreach($tax_terms as $tax_term) {
        list($taxonomy,$term) = explode(':',$tax_term);
        $sql = <<<SQL
AND $wpdb->posts.ID IN (
  SELECT tr.object_id
  FROM $wpdb->term_relationships AS tr
  INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
  INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id
  WHERE tt.taxonomy='%s' AND t.slug='%s'
)
SQL;
        $where .= $wpdb->prepare($sql,$taxonomy,$term);
      }
    }
  }
  return $where;
}

إذا لم يكن هذا هو ما تحتاجه بالضبط ، على سبيل المثال ، تفضل مطابقة $term->term_id بدلاً من مطابقة $term->slug ، فلن يكون من الصعب للغاية تعديل الرمز لتلبية احتياجاتك ، على افتراض أنك مرتاح لـ SQL و .php.

4
MikeSchinkel

قديم Q ، ولكن يبدو أنه يأتي هنا هو الوضع الحالي - استفسارات التصنيف تحسنت كثيرا في 3.1 وأكثر منذ ذلك الحين.

في هذه الأيام ، سيتم التعامل معها بسهولة من خلال الاستعلام الضريبي باستخدام علاقة AND ، على سبيل المثال من Codex:

'tax_query' => array(
    'relation' => 'AND',
    array(
        'taxonomy' => 'movie_genre',
        'field'    => 'slug',
        'terms'    => array( 'action', 'comedy' ),
    ),
    array(
        'taxonomy' => 'actor',
        'field'    => 'term_id',
        'terms'    => array( 103, 115, 206 ),
        'operator' => 'NOT IN',
    ),
),

انظر معايير التصنيف للحصول على وثائق كاملة.


إخلاء المسؤولية المعتادة - أنا لم أفسد الأشياء المخصصة بنفسي حتى الآن.

أعتقد أن استعلامات التصنيف المعقدة لا يتم تنفيذها في WP الأساسية (حتى الآن). جرب الاستعلام تصنيفات متعددة البرنامج المساعد.

1
Rarst