it-swarm.com.de

Fragen Sie einen Taxonomiebegriff ab, schließen Sie einen anderen aus

Hier ist der Code, den ich verwende, um zu versuchen, eine einzelne Taxonomie für einen Begriff abzufragen, aber zurückgegebene Posts für diesen Begriff auszuschließen, die auch zu einem anderen gehören.

Auf Englisch ist dies das, was ich möchte: Abfrage 'Ressourcentyp' für 'Zeugnisse', aber nicht 'Zeugnisse', die auch 'Audio' sind.

Tipps zum Optimieren dieses Codes, damit er funktioniert?

<?php

    $testimonials_args = array(

        'post_type' => 'resource',
        'posts_per_page' => 1,
        'tax_query' => array(
        'relation' => 'AND',
             array(
                'taxonomy' => 'resource-type',
                'field' => 'slug',
                'terms' => array( 'testimonies' )
            ),
            array(
                'taxonomy' => 'resource-type',
                'field' => 'slug',
                'terms' => array( 'audio' ),
                'operator' => 'NOT IN'
            )
        )
    );

?>
2
developdaly

Da Sie zwei Bedingungen für eine Taxonomie ausprobieren, können Sie immer eine benutzerdefinierte SQL-Abfrage erstellen, etwa wie folgt:

$querystr = "
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 = 'resource' 
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->term_taxonomy.taxonomy = 'resource-type'
AND $wpdb->terms.slug = 'testimonies'
AND $wpdb->terms.slug NOT IN ('audio')
ORDER BY $wpdb->posts.post_date DESC
 ";

$pageposts = $wpdb->get_results($querystr, OBJECT);

oder Sie können nur nach einem Begriff abfragen und nach has_term() in der Schleife so etwas ausschließen:

if (!has_term('audio','resource-type',$post->ID)){
  //post without audio
}else{
  //post with audio (skip or whatever)
}
1
Bainternet

keine Ahnung, ob dies funktionieren würde, da ich lokal nicht genügend benutzerdefinierte Steuerbedingungen habe, um dies jetzt zu testen. Was ist, wenn Sie die UND-Verknüpfung in OR ändern?

bearbeitete b/ci hat in den Kommentaren unter: http://ottopress.com/2010/wordpress-3-1-advanced-taxonomy-queries/ gelesen, wonach Sie fragen ist so ziemlich unmöglich.

sie können jedoch möglicherweise alle Audio-Zeugnisse abfragen und deren IDs in ein Array einteilen. Fragen Sie dann alle Zeugnisse ab und verwenden Sie das Array, das Sie im Parameter posts__not_in erstellt haben.

1
helgatheviking