MySQL-Abfrage zum Festlegen von wp_postmeta mit dem Wert von term_taxonomy_id

Ich muss den wp_postmeta Wert (in der Tabelle: wp_postmeta ) für jeden Post term_taxonomy_id , der eine spezifische term_taxonomy_id (in der Tabelle: wp_term_relationships ):

Speziell:

  • Führen Sie eine Abfrage für jede post_ID mit term_taxonomy_id Wert ” term_taxonomy_id von 18 aus
  • Wenn der wp_postmeta für diese post_ID nicht den Schlüssel _category_permalink_ füge ihn mit dem auf 18 gesetzten Wert hinzu, ansonsten ignoriere ihn

Mein MySQL foo ist arm, also Entschuldigung, wenn das keinen Sinn ergibt oder ich Tabellen habe, Namen falsch herum.

UPDATE: In Bezug auf Antworten / Kommentare unten von @deadlyhifi und @Jot habe ich folgendes:

 function cleanup_permalink() { static $fnCount = 0; //to run only once if ($fnCount) return; $fnCount++; global $wpdb; $results = $wpdb->get_results("SELECT `object_id` FROM $wpdb->term_relationships WHERE `term_taxonomy_id` = 18"); foreach ($results as $result) { add_post_meta( $result, '_category_permalink_', '18', true); } } add_action('init','cleanup_permalink'); //i'm assuming init is the best place? 

Solutions Collecting From Web of "MySQL-Abfrage zum Festlegen von wp_postmeta mit dem Wert von term_taxonomy_id"

Ich denke, ich weiß, was Sie meinen, und wenn das der Fall ist, ist es eigentlich eine einfache Operation.

term_relationship Sie zuerst alle object_id s aus der term_relationship Tabelle.

 $results = $wpdb->get_results("SELECT `object_id` FROM $wpdb->term_relationships WHERE `term_taxonomy_id` = 18"); 

Und dann durchlaufen Sie jeden dieser Werte und update_post_meta auf 18.

 foreach ( $results as $result ) update_post_meta($result, '_category_permalink_', '18', true); 

Es könnte nicht so einfach sein, oder?

@ Toddhifi’s Antwort sieht gut aus. Ich würde vorschlagen, WP_Query für eine menschlichere lesbare “select” WP_Query Angenommen, Ihre Ausdruckstaxonomie 18 ist die foo Kategorie, hier ist das Äquivalent zu WP_Query :

 $query = new WP_Query( array( 'posts_per_page' => -1, 'category_name' => 'foo', // slug, not name! ) ); while ( $query->have_posts() ) { $query->the_post(); update_post_meta( get_the_ID(), '_category_permalink_', 18, true ); } 

Sie können auch 'cat' => 18 wenn Sie bei den IDs bleiben müssen. Es ist definitiv nicht schneller als die von @deadlyhifi erwähnte direkte SQL-Methode, aber es ist freundlicher für das Auge.

 global $wpdb; $query = 'SELECT `object_id` FROM '.$wpdb->term_relationships.' WHERE `term_taxonomy_id`=18'; $obj_ids = $wpdb->get_col( $query ); foreach( $obj_ids as $post_id ) { update_post_meta( $post_id, '_category_permalink_', '18' ); } 

Sollte es für Sie tun, unter der Annahme, @ Kovshenin Methode funktioniert nicht, da es die bessere Methode ist sicher, wenn es tut (obwohl ich eine foreach anstatt der Weile persönlich versuchen könnte, ist entweder gültig).

Ich habe das nicht direkt getestet, aber ich habe die Abfrage getestet und die Ausgabe von $obj_ids überprüft. Wenn sie also nicht perfekt ist, ist sie nahe dran.