web-dev-qa-db-fra.com

Comment récupérer des données sérialisées depuis les options wordpress

J'ai les données sérialisées suivantes dans une option wp a:2:{s:5:"Title";s:11:"your title";s:7:"Message";s:20:"Hola testing testing";}

Je voudrais retourner à être utilisé dans un formulaire, et le montrer aussi dans le front-end, j'ai essayé

<?php echo get_option('notice_data[Message]'); ?>

c'est le tableau

$notice_data = array(
    'Title' => '',
    'Message' => ''
);
add_option("notice_data", 'Default', '', 'yes');

Je crée un plugin qui a une page de paramètres avec deux formulaires qui enregistrent les données dans l’option wp afin d’être utilisées par la fonction jquery dans un fichier js. Voici une partie de la page de paramètres;

<textarea name="notice_data[Title]" id="notice_data" />
<?php echo get_option('notice_data[Title]'); ?>
</textarea>
</td>
</tr>
<tr valign="top">
<th width="92" scope="row">Body Message</th>
<td width="406">
<textarea name="notice_data[Message]" id="notice_data" cols="40" rows="10" />
<?php echo get_option('notice_data[Message]'); ?>
</textarea>

Je localise également le script pour récupérer les données enregistrées dans l'option wp à utiliser dans une fonction jQuery qui affiche les messages lorsque certaines conditions sont remplies. Comment puis-je récupérer les données sérialisées?

1
David Garcia

Non, ça ne marchera pas:

<?php echo get_option('notice_data[Message]'); ?>

Parce que get_option extrait la valeur de l’option entière par option_name, il ne extrait pas par morceaux le tableau sérialisé. Ce que vous demandez, c'est une clé (option_name) appelée littéralement notice_data[Message]. En supposant que vous ayez enregistré l'option en tant que notice_data, vous n'obtiendrez pas de correspondance et je ne suis même pas sûr que les parenthèses soient prises en charge dans le nom de l'option. Je n'ai jamais essayé.

Ce dont tu as besoin c'est ...

$notice_data = get_option('notice_data');
echo $notice_data['Message'];

Vous avez dit que vous "localisez le script". Donc, pour une utilisation par jQuery/Javascript, vous feriez quelque chose comme ceci ( presque complètement écrit dans le Codex ):

$notice_data = get_option('notice_data');

wp_enqueue_script( 'some_handle' );
$translation_array = array( 
    'notice_data' => $notice_data['Message'] 
);
wp_localize_script( 'some_handle', 'object_name', $translation_array );

Votre Javascript devrait y avoir accès comme object_name.notice_data.

8
s_ha_dum