post meta – problem: kopiere das gleiche meta für alle Artikel

Ich habe ein Post-Meta erstellt, um den Namen eines bestimmten “Autors” zu meinen Artikeln hinzuzufügen. Aber wenn ich das Meta des ersten Artikels betrete, kopieren alle anderen Artikel das gleiche Meta. Wenn ich dann einen zweiten Namen in das Meta des zweiten Artikels gebe, kopieren alle anderen Artikel dieses zweite “Meta”, als ob ich diesen zweiten Namen für jeden Artikel eingegeben hätte.

Wie kann ich das Meta für nur einen Artikel angeben? im Admin-Panel: wenn ich den Autor nicht angegeben habe, habe ich immer noch “leere Meta”, das ist der Text, den ich in diesem Fall in functions.php angeben. ABER, in der Seite im Internet, zeigt es den Namen des letzten “Meta” -Namens, der in einem beliebigen Artikel geschrieben ist. Ich hoffe meine Beschreibung ist klar genug, bitte sagen Sie mir für weitere Informationen.

Hier sind die Hauptlinien des Codes:

$met = get_post_meta($post->ID, 'champ', true)? get_post_meta($post->ID, 'champ', true) : 'empty meta'; echo ''; … add_post_meta($post_id, "champ", $_POST['champ'], true); update_post_meta($post_id, "champ", $_POST['champ']); 

Solutions Collecting From Web of "post meta – problem: kopiere das gleiche meta für alle Artikel"

Sie müssen nicht prüfen, ob Metadaten vor dem Hinzufügen / Aktualisieren vorhanden sind. update_post_meta macht das für Sie. (Siehe Codex )

 update_post_meta($post_id, $meta_key, $meta_value, $prev_value); 

Das vierte (optionale) $prev_value Argument, falls gesetzt, aktualisiert nur $meta_key-$prev_value Paare. Wenn nicht gesetzt, werden alle Werte für diesen $meta_key für diesen Beitrag aktualisiert. Wenn es $meta_key nicht finden kann, $meta_key es einen neuen Datensatz.

Der add_post_meta fügt standardmäßig einen Datensatz hinzu, unabhängig davon, ob der Schlüssel bereits existiert. Es scheint, dass dies der var_dump ist, also versuche var_dump -ing get_post_meta($post->ID, $key, FALSE) und stirb, um zu überprüfen, was es get_post_meta($post->ID, $key, FALSE) .

BEARBEITEN

Ich habe das nicht überprüft, aber da Ihr Post-Meta keine Unterstreichung hat, erscheint es möglicherweise zweimal auf der Post-Seite (einmal in Ihrer benutzerdefinierten Metabox und einmal im Bereich für benutzerdefinierte Felder (dies kann ausgeblendet sein), überprüfen Sie den Bildschirm Dies kann dazu führen, dass sowohl der neue Metawert als auch die alten Werte in der database gespeichert werden.

Hier ist der Code meines Plugins, um ein Post-Meta hinzuzufügen. Die Probleme sind:

  • nach einigen tests habe ich herausgefunden, dass nur die “älteren” posts das post meta “kopieren”, aber nicht die neuesten. Also sagen wir, es ist nicht das Hauptproblem, das ich habe. (Wenn Sie eine Erklärung dafür haben, nehme ich es auch;))

  • Das Hauptproblem ist jetzt: Wenn ich ein Meta aktualisiere, wird es nicht aktualisiert, sondern es wird ein neues Meta erstellt, für die gleiche post_id, den gleichen Meta_Key und somit den gleichen Meta_Wert.

Ich verwende hier die function “Speichern” aus dem Tutorial (oben).

  add_action( 'add_meta_boxes', 'myplugin_add_custom_box' ); add_action( 'save_post', 'myplugin_save_postdata' ); /* Adds a box to the main column on the Post and Page edit screens */ function myplugin_add_custom_box() { add_meta_box( 'test1', __( 'Author : ', 'myplugin_textdomain' ), 'myplugin_inner_custom_box', 'post' ); add_meta_box( 'test2', __( 'My test2', 'myplugin_textdomain' ), 'myplugin_inner_custom_box', 'movies' ); } /* Prints the box content */ function myplugin_inner_custom_box() { global $post; echo ''; $met = get_post_meta($post->ID, 'champ', true)? get_post_meta($post->ID, 'champ', true) : 'empty meta'; /* input */ echo ' '; echo ''; /* select list */ echo ' '; echo ''; wp_reset_query(); } // Save the Metabox Data function wpt_save_events_meta($post_id, $post) { if ( !wp_verify_nonce( $_POST['eventmeta_noncename'], plugin_basename(__FILE__) )) { return $post->ID; } if ( !current_user_can( 'edit_post', $post->ID )) return $post->ID; $events_meta['champ'] = $_POST['champ']; foreach ($events_meta as $key => $value) { // Cycle through the $events_meta array! $value = implode(',', (array)$value); // If $value is an array, make it a CSV (unlikely) if(get_post_meta($post->ID, $key, FALSE)) { // If the custom field already has a value update_post_meta($post->ID, $key, $value); } else { // If the custom field doesn't have a value add_post_meta($post->ID, $key, $value); } if(!$value) delete_post_meta($post->ID, $key); // Delete if blank } } add_action('save_post', 'wpt_save_events_meta', 1, 2); // save the custom fields