webentwicklung-frage-antwort-db.com.de

Speichern eines Arrays in einem einzelnen benutzerdefinierten Feld

Ich habe das folgende Array, das ich in einem einzelnen benutzerdefinierten Feld speichern möchte.

array("Accounting"=>"Peter", "Finance"=>"Ben", "Marketing"=>"Joe");

Ich möchte es speichern, indem ich es in ein benutzerdefiniertes Feld in wp-admin eingebe.

Dann möchte ich dieses benutzerdefinierte Feld als Array in einer Seite mit so etwas wie abrufen

$pos = get_post_meta($post_id, 'pos ', true);

und Ausgabe des Arrays mit:

foreach($pos  as $x => $x_value) {
    echo $x_value . " head " . $x;
    echo "<br>";
}

Meine Fragen sind:

  1. Wie speichere ich das Array in einem einzelnen benutzerdefinierten Feld? Was genau muss ich in das benutzerdefinierte Feld eingeben?

  2. Wie rufe ich diesen benutzerdefinierten Feldwert als Array in einer WordPress-Vorlage ab?

Endgültige Lösung für das Problem danke an Ray:

  1. Ich schreibe Folgendes direkt in das benutzerdefinierte Feld in wp admin (oder verwende update_post_meta mit json_encode in template)

    {"Accounting":"Peter","Finance":"Ben","Marketing":"Joe"}
    
  2. Array in benutzerdefiniertem Feld abrufen mit:

    $json_data = get_post_meta($post_id, "my_custom_meta_key", true);
    $arr_data = json_decode($json_data, true);
    
2
Philip

Sie können json_encode() verwenden, wodurch es zu einer Zeichenfolge wird, die Sie in ein benutzerdefiniertes Feld einfügen können. Stellen Sie dann einfach sicher, dass Sie json_decode() verwenden, um es zu einem Objekt zurückzubringen, oder json_decode($data, true), um es als Array zurückzubringen

$arr = array("Accounting"=>"Peter", "Finance"=>"Ben", "Marketing"=>"Joe");
update_post_meta($post_id, "my_custom_meta_key", json_encode($arr));
$json_data = get_post_meta($post_id, "my_custom_meta_key", true); // true to ensure it comes back as a string and not an array
$arr_data = json_decode($json_data, true); // 2nd parameter == true so it comes back as an array();
4
Ray

Normalerweise werden benutzerdefinierte Felder von der Formulareingabe gespeichert. Wenn Sie ein Array wie das Ihre speichern möchten, können Sie im Bildschirm für die Nachbearbeitung eine Metabox erstellen.

Diese Metabox sollte Eingaben mit dem gleichen Namen anzeigen

<input type="text" name="pos[Accounting]" value=""/>
<input type="text" name="pos[Finance]" value=""/>
<input type="text" name="pos[Marketing]" value=""/>

Die Art und Weise, wie Sie die Anzeige vorschlagen, sieht gut aus.

Weitere Details zum Anzeigen und Speichern von Metaboxen finden Sie unter add_meta_boxes action et add_meta_box()

hoffe es gibt dir ein paar hinweise!

0
Benoti

Klingt so, als ob Sie in der Lage sein möchten, diese Werte aus der Metabox der benutzerdefinierten WordPress-Felder einzugeben:

 enter image description here 

Dazu würde ich ein benutzerdefiniertes Format verwenden und es dann konvertieren, wenn der Beitrag gespeichert wird.

// This function converts "Accounting,Peter|Finance,Ben|Marketing,Joe" format
// to array("Accounting"=>"Peter", "Finance"=>"Ben", "Marketing"=>"Joe");
function smyles_convert_custom_format_to_array( $val ){

    $employee_data = array();

    // Create array with | as separator
    $parts = explode( '|', $val );

    if( ! empty( $parts ) ){

        // Loop through each one
        foreach( $parts as $part ){

            // Split again based on comma
            $part_array = explode( ',', $part );

            // As long as there is a value, let's add it to our employee array
            if( ! empty( $part_array[0] ) && ! empty( $part_array[1] ) ){

                // First value in array will be our key, second will be the value
                $employee_data[ $part_array[0] ] = $part_array[1];
            }

        }

    }

    return $employee_data;
}

Anschließend müssen Sie eine Aktion hinzufügen, um das Meta zu aktualisieren, nachdem Sie das benutzerdefinierte Format mit der oben genannten Funktion konvertiert haben:

// Add a custom action on save post so we can convert our custom format
add_action( 'save_post', 'smyles_save_post_format_custom_field', 99, 3 );
// This function will update the post meta with an array instead of using our custom format
function smyles_save_post_format_custom_field( $id, $post, $update ){

    $custom_field = 'employees';

    // Change `post` below to something else if using custom post type
    if( $post->post_type != 'post' ) {
        return;
    }

    // Only try to process if a value exists
    if( ! empty( $_POST[ $custom_field ] ) ){
        $value = smyles_convert_custom_format_to_array( $_POST[ $custom_field ] );
    } else {
        // Otherwise set $value to empty value, meaning custom field was deleted or has an empty value
        $value = array();
    }

    update_post_meta( $id, $custom_field, $value, true );

}

Wenn Sie diese Werte abrufen möchten, verwenden Sie einfach Folgendes:

// Arrays are stored serialized, so let's get that first
$value = get_post_meta( $post_id, 'employees', true);

Voila! Profitieren!

0
sMyles