Wie speichere ich jede Option in einem Multiple-Select-Menü als eigenes Meta_Key + Meta_Wert-Paar?

Wie speichere ich jede Option in einem Multiple-Select-Menü als eigenes Meta_Key + Meta_Wert-Paar?

Dies ist das grundlegende Mehrfachauswahlmenü. Hinweis: In mehreren Auswahlmenüs können Sie mehrere Optionen auswählen.

 Product One Product Two Product Three .... etc  

Das bisschen Code in der function save_post , mit dem ich Hilfe brauche.

 if ( isset( $_POST[ 'products' ] ) ) { foreach ( $_POST[ 'products' ] as $product ) { // this would just keep adding the products as separate meta keys, which is what I want, but I need to modify it so it deletes them when they are unselected. add_post_meta( $post_id, 'products', $product, false ); } } 

Ich möchte, dass jede Option ein eigener Metaschlüssel und ein eigenes Wertpaar ist und kein serialisiertes Array. Wenn das Mehrfachauswahlmenü aktualisiert wird, möchte ich, dass alte Werte nicht länger aus der delete_post_meta mit delete_post_meta .

Zum Beispiel würde die Tabelle wp_postmeta so aussehen:

 post_id meta_key meta_value 45 products 2 63 products 3 12 products 1 

Solutions Collecting From Web of "Wie speichere ich jede Option in einem Multiple-Select-Menü als eigenes Meta_Key + Meta_Wert-Paar?"

Versuchen Sie dies in save_post aber bitte beachten Sie, dass der Code nicht getestet wurde

 $old = get_post_meta($post_id, 'products'); $new = isset ( $_POST['products'] ) ? $_POST['products'] : array(); if ( empty ($new) ) { // no products selected: completely delete alla meta values for the post delete_post_meta($post_id, 'products'); } else { $already = array(); if ( ! empty($old) ) { foreach ($old as $value) { if ( ! in_array($value, $new) ) { // this value was selected, but now it isn't so delete it delete_post_meta($post_id, 'products', $value); } else { // this value already saved, we can skip it from saving $already[] = $value; } } } // we don't save what already saved $to_save = array_diff($new, $already); if ( ! empty($to_save) ) { foreach ( $to_save as $product ) { add_post_meta( $post_id, 'products', $product); } } }