J'ai le tableau suivant que je veux stocker dans un seul champ personnalisé.
array("Accounting"=>"Peter", "Finance"=>"Ben", "Marketing"=>"Joe");
Je veux le stocker en le tapant dans un champ personnalisé dans wp-admin.
Ensuite, je veux récupérer ce champ personnalisé sous forme de tableau dans une page, avec quelque chose comme
$pos = get_post_meta($post_id, 'pos ', true);
et affichez le tableau avec:
foreach($pos as $x => $x_value) {
echo $x_value . " head " . $x;
echo "<br>";
}
Mes questions sont:
Comment enregistrer le tableau dans un seul champ personnalisé? Qu'est-ce que je dois taper exactement dans le champ personnalisé?
Comment puis-je récupérer cette valeur de champ personnalisé sous forme de tableau dans un modèle wordpress?
Solution finale au problème merci à Ray:
J'écris ce qui suit directement dans le champ personnalisé de l'administrateur de wp (ou utilise update_post_meta avec json_encode dans le modèle)
{"Accounting":"Peter","Finance":"Ben","Marketing":"Joe"}
Récupérer un tableau dans un champ personnalisé avec:
$json_data = get_post_meta($post_id, "my_custom_meta_key", true);
$arr_data = json_decode($json_data, true);
Vous pouvez json_encode()
le rendre, ce qui en fera une chaîne que vous pourrez placer dans un champ personnalisé, puis vous assurer simplement que vous le json_decode()
pour le ramener à un objet ou json_decode($data, true)
pour le ramener sous forme de tableau
$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();
Généralement, les champs personnalisés sont sauvegardés à partir de la saisie de formulaire. Si vous souhaitez enregistrer un tableau comme le vôtre, vous pouvez créer une métabox sur l'écran de modification post-édition.
Cette metabox devrait afficher une entrée avec le même nom, quelque chose comme ça
<input type="text" name="pos[Accounting]" value=""/>
<input type="text" name="pos[Finance]" value=""/>
<input type="text" name="pos[Marketing]" value=""/>
La façon dont vous proposez d’afficher semble bonne.
Vous pouvez trouver plus de détails pour afficher et sauvegarder des métaboxes avec add_meta_boxes
action et add_meta_box()
j'espère que cela vous donne des indices!
On dirait que vous voulez pouvoir entrer ces valeurs à partir de la metabox des champs personnalisés WordPress:
Pour ce faire, je voudrais utiliser un format personnalisé, puis le convertir lorsque la publication est enregistrée.
// 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;
}
Vous devez ensuite ajouter une action pour mettre à jour la méta après la conversion du format personnalisé avec la fonction ci-dessus:
// 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 );
}
Lorsque vous voulez extraire ces valeurs, utilisez simplement ceci:
// Arrays are stored serialized, so let's get that first
$value = get_post_meta( $post_id, 'employees', true);
Voila! Profit!