Wie man einen benutzerdefinierten Feldwert in ein Tag umwandelt

Ich habe eine Website mit einem benutzerdefinierten Feld (Standort) für jeden Beitrag. Ich möchte den Wert jedes benutzerdefinierten Feldwerts in jedem zu markierenden Artikel ändern.

Ich habe versucht, hier zu suchen, konnte aber nicht viele Informationen bekommen.

Einige nützliche Links hier:

Plugin zum automatischen Konvertieren von benutzerdefinierten Feldern in Tags

Ich habe versucht, den folgenden Code zu verwenden, aber nichts davon funktioniert.

add_action('save_post','custom_field_add_tags'); function custom_field_add_tags($post_id) { $post = get_post($post_id); //get values of custom fields and put into array $tag1 = get_post_meta($post_id, 'key_1', true); $tag2 = get_post_meta($post_id, 'key_2', true); $tag3 = get_post_meta($post_id, 'key_3', true); $tags_to_add = array($tag1, $tag2, $tag3); //now check if tag does not already exist (if no - add tag from custom field) $add_tags = array(); foreach(get_the_terms($post_id, 'post_tag') as $term) { if(!in_array($term->slug, $tags_to_add)) $add_tags[] = $term->slug; } if(!empty($add_tags)) wp_add_post_tags($post_id, implode(',', $add_tags)); } 

Ein weiterer :

  global $wpdb; $sql = "SELECT post_id , meta_value FROM ".$wpdb->prefix."postmeta WHERE meta_key = 'cp_additional_options' "; $res = $wpdb->get_results( $sql ) ; if( !empty($res)){ foreach( $res as $r ){ $ret = wp_insert_term( $r->meta_value , 'pa_popular-features' ); if( !$ret->errors ){ $term_id = $ret['term_id']; wp_set_post_terms( $r->post_id, $term_id, 'pa_popular-features'); } } } 

Das no von Artikeln auf meiner Website ist riesig .. mehr als 90.000 Artikel.

Kann dies mit einer einfachen function oder durch MySQL-Befehl geschehen.

Solutions Collecting From Web of "Wie man einen benutzerdefinierten Feldwert in ein Tag umwandelt"

Da es sich um eine einmalige Aufgabe handelt, ist es am einfachsten, ein Migrationsskript wie folgt zu erstellen.

Hinweis: Je nach Speicherkapazität Ihres Servers kann es zu einem Timeout kommen (90.000 Zeilen werden verarbeitet).

 function my_migration_script() { global $wpdb; // Quick and dirty way to get post ids. Normally don't use this method. $post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type = 'post'" ); // Loop through all ids. foreach ( $post_ids as $post_id ) { // Grab the location meta value if it exists. if ( $value = get_post_meta( $post_id, 'location', true ) ) { // Remove any commas since it's used as a delimiter. $value = str_replace ( ',', '', $value ); // Create a tag based on the `location` custom field value. wp_add_post_tags( $post_id, $value ); } } // Uncomment if you'd rather delete without verifying first. // $wpdb->delete( $wpdb->postmeta, array( 'meta_key' => 'location' ) ); } // Kick off the script. my_migration_script(); 

Zum Schluss löschen Sie alle Werte für die alten benutzerdefinierten Feldwerte direkt aus der database (mit phpMyAdmin oder einem anderen DB-Zugriffswerkzeug, das Sie haben).

 DELETE FROM wp_postmeta WHERE `meta_key` = 'location'; 

Ich lege das außerhalb des Skripts ab, damit Sie zuerst überprüfen können, ob die Migration erfolgreich war, und php-Speicherressourcen während der Ausführung speichern.

Wenn Sie keinen Zugriff auf phpMyAdmin haben, entfernen Sie einfach die Zeile oben im Skript, und führen Sie sie erneut aus.

Hinweis: Wenn das Tag bereits existiert, wird es nicht dupliziert, sodass Sie das Script mehrmals ohne Schaden ausführen können.