Fügen Sie Kategorien zu Posts mit dem Tag wordpress hinzu

Ich muss eine Abfrage (über functions.php ) ausführen und alle Beiträge mit einem bestimmten Tag finden und diese Beiträge zu einer Kategorie hinzufügen.

Beispiel:

Finden Sie alle Beiträge mit dem Stichwort “auto” und fügen sie der Kategorie “transport” hinzu .

BEARBEITEN: NOCH NICHT ARBEITEN, ABER …

Dies ist, was ich bisher dank @ Benoti Antwort (unten) habe:

 $args = array( 'post_type'=>'post', 'tax_query' => array( 'taxonomy' => 'tag', 'field' => 'slug', 'terms' => 'car', ), ); $posts = get_posts($args); foreach ($posts as $post) : //do stuff $cat_id = 1669; // the ID of category transportation $append = true; // If true, terms will be appended to the object. If false, terms will replace existing terms // make some verif that's better wp_set_object_terms($post->ID, $cat_id, 'category', $append); endforeach; 

… aber es funktioniert nicht.

Auch, um zu klären :

Ich muss eine Kategorie zu allen Beiträgen hinzufügen, die das “Auto” -Tag enthalten, aber ich weiß nicht, in welcher Kategorie sie (die Beiträge) sind.

Wie kann ich das sicher machen, ohne meine Seite zu zerstören?

Solutions Collecting From Web of "Fügen Sie Kategorien zu Posts mit dem Tag wordpress hinzu"

Dies ist nur ein Beispiel, um alle Beiträge in der Kategorie Transport mit dem Tag Auto zu erhalten:

 $args = array( 'post_type'=>'post', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => array( 'transportation' ), ), array( 'taxonomy' => 'tag', 'field' => 'slug', 'terms' => array( 'car' ), 'operator' => 'IN', ), ); $posts = get_posts($args); 

EDIT: für eine einfache tax_query

 'tax_query' => array( array( 'taxonomy' => 'tag', 'field' => 'slug', 'terms' => 'car' ) ) 

Sie können weitere Details und es für Ihren Fall hier https://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters greifen

Dies wird nicht das Post-Tag “Auto” bekommen und die Kategorie “Transport” hinzufügen, aber Sie müssen zuerst Posts bekommen. Mit diesem Ergebnis können Sie es durchlaufen und wp_set_object_terms( $object_id, $terms, $taxonomy, $append ); In dieser Schleife fügen Sie Ihre Kategorie den getaggten Posts hinzu.

 foreach($posts as $post){ $append = true; // If true, terms will be appended to the object. If false, terms will replace existing terms // make some verif that's better wp_set_object_terms($post->ID, 'transportation', 'category', $append); } 

das beste es zu lesen https://codex.wordpress.org/Function_Reference/wp_set_object_terms

Ich hoffe du verstehst es !

OK! Dank @Benoti konnte ich einen Weg finden, dies zu tun.

Es ist möglich, dass es verbessert werden kann, aber Sie können immer beitragen …

 $args = array('post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'post_tag', 'field' => 'slug', 'terms' => 'tag_slug_to_find',// < = your cat slug to find ), ), ); $posts = get_posts( $args ); foreach ($posts as $post) : // let's do some stuff $cat_id = 'cat_slug_name'; //Cat slug to append to the object // If true, terms will be appended to the object. If false, terms will replace existing terms $append = true; // make some verif that's better $term_taxonomy_ids = wp_set_object_terms($post->ID, $cat_id, 'category', $append); // Let's count how many object's where changed // (If you know a better way, please let us know. Thanks!) $count = count( wp_set_object_terms($post->ID, $cat_id, 'category', $append)); if ( is_wp_error( $term_taxonomy_ids ) ) { echo 'There his an error somewhere and the terms could not be set.'; } else { echo ''. $count . ' posts with tag "'.$cat_id.'" where changed.'; } endforeach; 

Nochmals vielen Dank, @Benoti ! Deine Antwort war sehr nützlich!