it-swarm.com.de

WP_Query: Category__in und Tag__in werden gemischt

Ich erstelle einen Abschnitt "Verwandte Beiträge" für mein Thema, basierend auf einem Tutorial von wpbeginner.com . Es wurden zwei Optionen für die Auswahl von Beiträgen angeboten: Beiträge in derselben Kategorie (n) mit category__in oder Beiträge mit denselben Tags mit tag__in.

Ist es möglich, sie in einen großen Mixtopf zu füllen und Beiträge aus allen auszuwählen? Ich meine nicht diejenigen, die dieselbe Kategorie (n) UND dieselben Tags haben, sondern diejenigen, die entweder oder haben.

1
Nate

Ja das ist möglich Alle Taxonomien werden in der Datenbank in der Tabelle wp_term_taxonomy gespeichert. Die folgenden sind alle als Taxonomien aufgeführt

  • kategorie

  • post_tag

  • link_category

  • post_format und

  • Benutzerdefinierte Taxonomien

Alle Begriffe, die zu diesen Taxonomien gehören, werden in der Tabelle wp_terms gespeichert. Tags sind Begriffe der post_tag-Taxonomie, und alle "Kategorien", die Sie im Post-Menü unter "Kategorien" erstellen, sind eigentlich Begriffe der Taxonomie category.

Dies macht es einfach, die verschiedenen Taxonomien und Ausdrücke in einer Abfrage zu kombinieren. Um dies zu erreichen, verwenden Sie die Taxonomieparameter in WP_Query , um einen benutzerdefinierten tax_query auszuführen.

OK, also müssen wir zuerst eine Liste aller Kategorien und Tags abrufen, die zu einem Beitrag gehören. Für Kategorien verwenden Sie get_the_category und für Tags get_the_tags . Sie werden dies als Array zurückgeben, das Sie in Ihrer benutzerdefinierten Abfrage verwenden werden

global $post;
//get the categories a post belongs to          
$cats = get_the_category($post->ID);

$cat_array = array();
    foreach($cats as $key1 => $cat) {
        $cat_array[$key1] = $cat->slug;
    }

//get the categories a post belongs to      
$tags = get_the_tags($post->ID);

$tag_array = array();
    foreach($tags as $key2 => $tag) {
        $tag_array[$key2] = $tag->slug;
    }

Hier sind Ihre benutzerdefinierten Abfrageargumente. Sie können die Taxonomieparameter unter dem Link zu WP_query nachlesen, den ich angegeben habe. Sehen Sie sich auch alle Parameter an, die Sie in WP_query verwenden können, da einige Parameter aus diesem Lernprogramm vor langer Zeit abgeschrieben wurden, z. B. caller_get_posts, der durch ignore_sticky_posts ersetzt wurde.

$args = array(
    'posts_per_page' => 5,
    'orderby' => 'Rand',
    'tax_query' => array(
        'relation' => 'OR',
        array(
            'taxonomy' => 'category',
            'field' => 'slug',
            'terms' => $cat_array,
            'include_children' => false 
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'slug',
            'terms' => $tag_array,
        )
    )
);

$the_query = new WP_Query( $args );

Sie können mit dem Code herumspielen und ihn nach Belieben ändern.

1
Pieter Goosen