J'ai ajouté quelques options de case à cocher au formulaire de widget par défaut. Mais je ne sais pas comment accéder à ces options et les transmettre lors de l'événement de sauvegarde du widget (widget_update_callback
) afin qu'elles puissent être enregistrées par WP dans la base de données.
Comment transmettre mes valeurs de formulaire personnalisées à WP pour enregistrer les options de widget pour chaque widget?
Dans la première fonction, j'ajoute mes options de case à cocher à tous les panneaux de contrôle des widgets ...
add_filter('in_widget_form', 'wse_widget_context_form');
function wse_widget_context_form(){
$checked = ' checked="checked"';
?>
<div class="wse_context">
<ul>
<li>Don't show this widget on: </li>
<li><label><input value="on" type="checkbox" name="noHome" id="noHome"<?php if(isset($instance['noHome'])) echo $checked ?> />Home Page</label></li>
<li><label><input value="on" type="checkbox" name="noPosts" id="noPosts"<?php if(isset($instance['noPosts'])) echo $checked ?> /> Posts</label></li>
<li><label><input value="on" type="checkbox" name="noPages" id="noPages"<?php if(isset($instance['noPages'])) echo $checked ?> /> Pages</label></li>
<li><label><input value="on" type="checkbox" name="noCats" id="noCats"<?php if(isset($instance['noCats'])) echo $checked ?> /> Categories</label></li>
</ul>
</div>
La fonction de rappel est ci-dessous. $instance
ne contient pas les valeurs de formulaire personnalisées, mais uniquement les valeurs de widget par défaut (texte et contenu). Comment ajouter mes options personnalisées à $instance
?
<?php
add_filter('widget_update_callback', 'wse_widget_context_callback');
function wse_widget_context_callback($instance){
echo 'instance: '.$instance.'<br/>'; // returns array but no custom form values
}
Vous ne savez pas si vous avez encore du mal à résoudre ce problème, mais voici ce que vous propose la solution:
Ajoutez les arguments suivants à wse_widget_context_form()
: $widget
, $return
et $instance
Utilisez ensuite les éléments suivants pour obtenir les ID et les noms de champ: <?php echo $widget->get_field_id('field_name'); ?>
et <?php echo $widget->get_field_name('field_name'); ?>
respectivement. par exemple.
<li><label><input value="on" type="checkbox" name="<?php echo $widget->get_field_name('noHome'); ?>" id="<?php echo $widget->get_field_id('noHome'); ?>"<?php if(isset($instance['noHome'])) echo $checked ?> />Home Page</label></li>
J'espère que cela pourra aider!
Je pense que vous avez affaire aux mêmes fonctionnalités avec http://wordpress.org/extend/plugins/widget-context/
vous pouvez vérifier la structure du code pour savoir comment il fonctionne
J'espère que cela donne une idée et aide