Verimli Taksonomi Kavşağı


9

Bunun için birçok kullanımım var ama pahalı bir işlem olacak şeyi yapmanın en etkili yolunu bilmek istiyorum.

Örnek olarak bir dükkan kullanacağım.

Verilen:

  • Bir ürün markası sınıflandırması
  • Bir ürün grubu sınıflandırması
  • Ürün yayın türü
  • Yukarıdaki sınıflandırmalar için arşiv şablonları

Ürün tipi arşivindeyken marka menüsünü ve marka arşivindeyken ürün türünü göstermenin en etkili, en etkili yöntemi nedir, ancak yalnızca bu gruptaki gönderiler için geçerli olan terimleri gösterir.

Örneğin, eğer 'kadın' ürün grubunda yer alırsam, sol tarafta markaları gösterir, ancak yalnızca 'kadın' ürün grubunda yer alan ürünler için belirtilen markaları gösterir. Örneğin 'Fancy womens clothes Inc' markası 'Manly mens Manly ltd' değil, gösterecektir.

Genel bir cevaba ihtiyacım var, ancak giyim ürünleri örneğinin kullanılmasından memnunum ve bunu kaba kuvvetle açgözlü bir algoritma ile nasıl yapacağımı biliyorum, ama bu inanılmaz derecede israf, ve bir çözümle ilgilenmiyorum her sayfa yükünü birkaç saniye artıracak ve süreçteki DB'den tüm yayınları tam olarak yükleyecek

düzenleme: Örnek 2:

Pikachu sarı bir pokemon ve sarı etikette, ancak Pikachu da elektrikli bir pokemon, bu yüzden tip taksonomisinin elektrik etiketinde. Yalnızca sarı etiket arşivinde sarı olan pokemon türlerini nasıl gösterebilirim? Örneğin, tüm çim pokemonları yeşil olmak, sarı arşivde bir çim menü öğesi olmayacağı, ancak yeşilde olacağı anlamına gelir (evet, yeşil olmayan çim pokemonu olduğunu biliyorum)

Yanıtlar:


13

Bu genelleme yapmak için, belirli bir sınıflandırma B'ye sahip postların sahip olduğu tüm sınıflandırma A terimlerinin elde edilmesi meselesidir.

Bu birkaç adımda imkansız olmasa da (gerçekten de verimsiz olacak) mesajlar arasında döngü döngüsü olsa da, verimlilik için SQL'den geçmenin makul olduğunu düşünüyorum.

Benim kaba almak olurdu:

/**
 * Get all terms of $tax_to taxonomy that posts in $term_from of $tax_from have.
 *
 * @param string $tax_from  taxonomy name
 * @param string $term_from term slug
 * @param string $tax_to    taxonomy name
 *
 * @return array|WP_Error
 */
function get_intersected_terms( $tax_from, $term_from, $tax_to ) {

    global $wpdb;

    $term_from = get_term_by( 'slug', $term_from, $tax_from );

    $query = "
    SELECT term_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = '{$tax_to}' AND term_taxonomy_id IN (
        SELECT term_taxonomy_id FROM {$wpdb->term_relationships} WHERE object_id IN (
            SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = {$term_from->term_taxonomy_id}
        )
    )
    ";

    $term_ids = $wpdb->get_col( $query );

    if( empty( $term_ids) )
        return array();

    return get_terms( $tax_to, array( 'include' => $term_ids ) );
}

// example
var_dump( get_intersected_terms( 'category', 'cat-a', 'post_tag' ) );
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.