web-dev-qa-db-fra.com

Comment ajouter des champs personnalisés aux paramètres dans les options de widget pour tous les widgets enregistrés?

Je souhaite ajouter une zone de saisie dans le formulaire personnalisé lorsque nous cliquons sur Paramètres du widget. Aimez vraiment avoir cette zone de texte supplémentaire dans tous les widgets être Custom Made ou ceux par défaut. J'aurai besoin d'aide pour ajouter une nouvelle boîte de saisie configurable dans un widget Wordpress pour tous les widgets enregistrés avec Theme.

Vos contributions/suggestions attendues, merci.

2

Vous voudriez aussi vous pencher sur les actions et les filtres suivants:

  • in_widget_form - Pour ajouter des éléments à un formulaire existant.
  • widget_update_callback - Pour enregistrer le contenu de votre nouveau formulaire.
  • widget_display_callback - Pour ajouter une sortie à la sortie existante.

Avec un peu de recherche dans les forums et sur Google, vous trouverez beaucoup d’aide, mais j’ai trouvé cette page assez utile pour démarrer moi-même.

8
Linda H

Le lien posté par Linda est un petit bijou! Malheureusement, c'est cassé maintenant. Il suffit de récupérer le contenu de cette machine dans le passé:

Étape 1: inscrivez les éléments du formulaire (contrôle du widget)

function kk_in_widget_form($t,$return,$instance){
    $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'text' => '', 'float' => 'none') );
    if ( !isset($instance['float']) )
        $instance['float'] = null;
    if ( !isset($instance['texttest']) )
        $instance['texttest'] = null;
    ?>
    <p>
        <input id="<?php echo $t->get_field_id('width'); ?>" name="<?php echo $t->get_field_name('width'); ?>" type="checkbox" <?php checked(isset($instance['width']) ? $instance['width'] : 0); ?> />
        <label for="<?php echo $t->get_field_id('width'); ?>"><?php _e('halbe Breite'); ?></label>
    </p>
    <p>
        <label for="<?php echo $t->get_field_id('float'); ?>">Float:</label>
        <select id="<?php echo $t->get_field_id('float'); ?>" name="<?php echo $t->get_field_name('float'); ?>">
            <option <?php selected($instance['float'], 'none');?> value="none">none</option>
            <option <?php selected($instance['float'], 'left');?>value="left">left</option>
            <option <?php selected($instance['float'], 'right');?> value="right">right</option>
        </select>
    </p>
    <input type="text" name="<?php echo $t->get_field_name('texttest'); ?>" id="<?php echo $t->get_field_id('texttest'); ?>" value="<?php echo $instance['texttest'];?>" />
    <?php
    $retrun = null;
    return array($t,$return,$instance);
}

Étape 2: Sauvegardez les données d'entrée du widget:

function kk_in_widget_form_update($instance, $new_instance, $old_instance){
    $instance['width'] = isset($new_instance['width']);
    $instance['float'] = $new_instance['float'];
    $instance['texttest'] = strip_tags($new_instance['texttest']);
    return $instance;
}

Étape 3: affichez la valeur dans la sortie du widget:

function kk_dynamic_sidebar_params($params){
    global $wp_registered_widgets;
    $widget_id = $params[0]['widget_id'];
    $widget_obj = $wp_registered_widgets[$widget_id];
    $widget_opt = get_option($widget_obj['callback'][0]->option_name);
    $widget_num = $widget_obj['params'][0]['number'];
    if (isset($widget_opt[$widget_num]['width'])){
            if(isset($widget_opt[$widget_num]['float']))
                    $float = $widget_opt[$widget_num]['float'];
            else
                $float = '';
            $params[0]['before_widget'] = preg_replace('/class="/', 'class="'.$float.' half ',  $params[0]['before_widget'], 1);
    }
    return $params;
}

Étape 4: Appelez maintenant vos fonctions ci-dessus avec des crochets d’action wordpress:

//Add input fields(priority 5, 3 parameters)
add_action('in_widget_form', 'kk_in_widget_form',5,3);
//Callback function for options update (priorität 5, 3 parameters)
add_filter('widget_update_callback', 'kk_in_widget_form_update',5,3);
//add class names (default priority, one parameter)
add_filter('dynamic_sidebar_params', 'kk_dynamic_sidebar_params');

La source

6
Towfiq