Wordpress 2.8 birden çok özel taksonomi şartları sorgulayabilir?

8 Cevap php

Ben 'teknolojiler' adında özel bir sınıflandırma oluşturduk ama kategorileri veya etiketleri ile benim gibi birden çok terim sorgulamak olamaz.

These querys DO work:

query_posts('tag=goldfish,airplanes');

query_posts('technologies=php');

However, neither of the following work correctly:

query_posts('technologies=php,sql');

query_posts('technologies=php&technologies=sql');

Benim amacım: 'php' bir teknoloji ile tüm mesajları ve 'sql' bir teknoloji ile tüm mesajlarını göster

Herhangi bir fikir? Bu bile mümkün mü? Teşekkürler!

8 Cevap

Görünüşe query_posts bu özel durumda yardımcı olamaz. (Umarım Wordpress gelecekteki sürümlerinde eklenecektir!) Çözümü aşağıdaki gibi özel bir seçme sorgusu kullanmak için:

SELECT * 
FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
WHERE $wpdb->posts.post_type = 'post' 
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->term_taxonomy.taxonomy = 'technologies'
AND $wpdb->terms.slug = 'php' OR $wpdb->terms.slug = 'css'
ORDER BY $wpdb->posts.post_date DESC

More information can be found at the Wordpress Codex: http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

Bu gecikmiş bir cevap biraz, ama o yüzden benim bulguları katkıda düşündüm "birden çok terim tarafından wordpress ilgili mesajlar" için şu anda Google'da ilk.

Bu soru yayınlanmıştır beri Wordpress bu tür sorgu için izin vermek için değiştirildi. Bu size bir nesneye atanan özel taksonomi açısından herhangi biri tarafından ilgili mesajların bir listesini verecektir:

$post_cats = wp_get_object_terms(get_the_ID(), 'video_category', array('fields' => 'ids'));

$args=array(
    "tax_query" => array(
        array(
            "taxonomy" => "video_category",
            "field" => "id",
            "terms" => $post_cats
        )
    ),
    'post__not_in' => array(get_the_ID()),
    'post_type' => 'video',
    'posts_per_page' => 8,
    'caller_get_posts' => 1
);

$related_by_cats = new WP_Query($args);

Bu SO, ben standartlarına kadar umut benim ilk katkıdır.

Eğer bu eklentiyi kullanabilirsiniz:

http://scribu.net/wordpress/query-multiple-taxonomies/

Tamam, işte bu benim çatlak. Biraz hacky, ama çalışıyor. Büyük dezavantajı diğer herhangi bir sorgu değişkenleri birden fazla terim çağrıldığında, Fail sorgunun tüm vars şeritler gibi, yeniden eklenmesi gerekir olmasıdır.

Ayrıca, birden çok taksonomilerin genelinde sorgulayarak karşı bu test etmedi. Bu, yalnızca belirli bir sınıflandırma içerisinde çalışır. Kendi risk kullanın.

function multi_tax_terms($where) {
    global $wp_query;
    if ( strpos($wp_query->query_vars['term'], ',') !== false && strpos($where, "AND 0") !== false ) {
        // it's failing because taxonomies can't handle multiple terms
        //first, get the terms
        $term_arr = explode(",", $wp_query->query_vars['term']);
        foreach($term_arr as $term_item) {
            $terms[] = get_terms($wp_query->query_vars['taxonomy'], array('slug' => $term_item));
        }

        //next, get the id of posts with that term in that tax
        foreach ( $terms as $term ) {
            $term_ids[] = $term[0]->term_id;
        }

        $post_ids = get_objects_in_term($term_ids, $wp_query->query_vars['taxonomy']);

        if ( !is_wp_error($post_ids) && count($post_ids) ) {
            // build the new query
            $new_where = " AND wp_posts.ID IN (" . implode(', ', $post_ids) . ") ";
            // re-add any other query vars via concatenation on the $new_where string below here

            // now, sub out the bad where with the good
            $where = str_replace("AND 0", $new_where, $where);
        } else {
            // give up
        }
    }
    return $where;
}

add_filter("posts_where", "multi_tax_terms");

Bu çalışır mı? query_posts ('tag = ekmek + fırın + tarifi')

Gönderen: http://codex.wordpress.org/Template_Tags/query_posts

Bu WP özel taksonomilerin uygulanmasından sonra isteğiyle bunları kullanmak için yerleşik işlevleri vardır nasılsa aptalca ve dokümantasyon olmayan yakındır. Ben bir çözüm arıyordu, bu sorgu çözer (ve benim gün yaptı). Teşekkürler.

Still, sadly I'm too dumb (OOP blind) to make it into a function so I don't repeat it all over. I get: **Fatal error**: Call to a member function get_results() on a non-object

Ben bir işlev içinde $wpdb aramak için nasıl bilmiyorum sanırım.

Bu gibi olmalıdır:

        global $wp_query;
        query_posts(
                array_merge(
                    array('taxonomy' => 'technologies', 'term' => array('sql', 'php')),
                    $wp_query->query
                )
            );

En azından, özel post_types için çalışıyor.

Hey, ben de bir zamanlar aynı sorunla karşı karşıya. Birçok çoklu değerleri yoksa, o zaman yerine bir ham SQL sorgusu yazarken daha, şu şekilde yapabilirsiniz:

$loop = new WP_Query(array('technologies' => 'php','technologies' => 'sql')); 

Then you can loop through the wp_query object created here. Though this is a very old post and am sure you have already solved the problem. :)