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:
post_ID
mit term_taxonomy_id
Wert ” term_taxonomy_id
von 18 aus 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?
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.