web-dev-qa-db-fra.com

Comment passer des options personnalisées du formulaire de widget au rappel de mise à jour du widget?

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

}
2
N2Mystic

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!

2
Hosh Sadiq

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

0
Gerald