web-dev-qa-db-fra.com

Comment économiser WP instances et options de widgets

Je suis un peu confus à ce sujet, même si j'ai lu toutes les API et cherché pendant des heures.

Lorsque j'active mon plugin, j'ajoute des valeurs à la base de données d'options, par exemple.

add_option('code','24');

Comment mettre à jour cette valeur ou l'utiliser dans le widget? Je ne vois plus que des "instances", comme dans l'exemple de cette page:

http://wpcoderz.com/creating-a-multi-instance-widget-with-wordpress-2-8/

Je ne comprends pas vraiment ce que sont les instances, la documentation WP ne fournit pas beaucoup d'explications à ce sujet.

1
SloBros

Instance

'instance' est vraiment comme dans "instance orientée objet": vous avez une certaine classe (qui est un certain widget que vous avez codé en tant que classe) et au moment où vous l'utilisez sur un site, vous en créez une instance spécifique; vous créez un objet que vous pouvez manipuler, MAIS vous pouvez avoir une instance ayant par exemple la valeur "hello" comme en-tête et une autre ayant "hello world" comme en-tête (même classe différentes instances) (donc 2 widgets de la même classe mais avec propriétés différentes).

Valeurs dans ces widgets

Si vous avez des valeurs qui sont spécifiques à une instance , vous devez les spécifier dans le code de classe du widget afin de pouvoir par exemple montrez-les dans un formulaire à l'utilisateur final à manipuler. Ne vous inquiétez pas pour l'enregistrement dans la base de données, la classe de widgets en arrière-plan s'en charge.

Si vous avez des valeurs identiques pour toutes les occurrences de ce widget, vous pouvez peut-être extraire cela d'une option que vous avez définie, mais elles ne seront jamais affichées à l'utilisateur dans un formulaire.

(Comme vous le savez avec add_option, vous ajoutez vous-même une nouvelle option à la table wp_options.)

avec les widgets, il existe une couche intermédiaire (la fabrique de widgets) qui enregistre les options de widget pour vous dans cette table wp_options. Vous n'avez donc pas à ajouter manuellement ces options et mises à jour sur ces options, pour voir cette ouverture wp_options et parcourir le contenu. de cette table.

si vous souhaitez néanmoins avoir accès à votre propre valeur d'option, vous devez ajouter le code d'option habituel dans le code du widget (depuis lors, ce paramètre peut être modifié dans l'écran du widget au lieu de votre propre écran de plug-in, par exemple).

Si c'est une valeur que vous souhaitez utiliser directement, il est peut-être plus facile de ne pas utiliser votre propre valeur d'option mais simplement celle du widget.

Si vous l'utilisez pour manipuler une autre valeur, vous pouvez peut-être mieux ajouter un filtre à la place, puis vous connecter à ce filtre pour manipuler la valeur utilisée dans le widget (au lieu de lire directement la valeur de l'option).

Donc, commencez par construire un widget, par exemple:

    /**
     * Constructor
     */
    function __construct()
{
    $widget_ops = array('classname' => 'widget_icons_latest', 'description'
        => __('Shows your latest ♥ WP-Favicons which corresponds (after some time caching) '.
        'with the latest outgoing links you published on your website. You can style '.
        'the icons by using the stylesheet in the text widget settings under the ♥ WP-favicons '.
        'Context settings.'));
    $control_ops = array('width' => 200, 'height' => 350);
    parent::__construct('WPFaviconsLatest', __('♥ Show Latest WP-Favicons'), $widget_ops, $control_ops);
}

Ensuite, dans la méthode du widget, vous pouvez définir des valeurs initiales, par exemple. Regardez $ title et vous verrez qu’il vérifie d’abord si CETTE instance du widget (c’est-à-dire le widget spécifique de ce type qui a été glissé dans la barre des widgets) définit déjà un titre, sinon elle attribue une valeur par défaut. Si vous souhaitez utiliser votre valeur par défaut à partir d'une option enregistrée dans la base de données, vous pouvez remplacer la valeur fixe par une valeur lue dans la table d'options, mais pourquoi le devriez-vous? Vous voyez également la valeur "25" ci-dessous qui est codée assez durement. Ce serait peut-être une bonne valeur à extraire d'une table d'options de base de données que vous avez définie vous-même dans un écran d'administrateur de plugin (remplacez donc 25 par l'option get)

    /**
     * (non-PHPdoc)
     * @see WP_Widget::widget()
     */
    function widget($args, $instance) {
        extract( $args );
        echo $before_widget;
        $title = apply_filters( 'widget_title', empty($instance['title']) ? '' : $instance['title'], $instance, $this->id_base);
        $amount = empty($instance['amount']) ? 25 : $instance['amount'];
        $instance['text'] = $this->specificOutput($amount, false);
        $text = apply_filters( 'widget_text', $instance['text'], $instance );
        if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?>
        <div class="widget_icons_latest"><?php echo $text; ?></div>
        <div class="widget_icons_latest">by <a href="http://wordpress.org/extend/plugins/wp-favicons/">WP-Favicons</a></div>
        <?php
        echo $after_widget;
    }

La méthode update met à jour les valeurs si elles ont été modifiées. La méthode de formulaire affiche le formulaire dans l'écran d'administration du widget.

5
edelwater