web-dev-qa-db-fra.com

qu'est-ce que nom_option sur la base de données qui stocke les informations du widget d'initialisation actuel dans la barre latérale frontale?

qu'est-ce que nom_option sur la base de données qui stocke les informations du widget d'initialisation actuel dans la barre latérale frontale?

1
justjoe

Résolu Ce que EAmann a dit est juste. Le problème réside dans la configuration du système de widgets dans WordPress. Pour chaque widget multi-instance tel que le texte, les informations sont stockées sous un nom d'option différent où la valeur de chaque widget est stockée de manière sérialisée.

L'astuce concerne la manière dont nous stockons les informations du widget texte en série qui ont parfois des caractères spéciaux. Nous devons utiliser heredoc. Heredoc est utilisé pour éviter le cas où une chaîne de caractères doit contenir ['] et ["], car les deux ne peuvent pas être utilisés sur une seule ligne.

$serialize_sidebar_widgets = <<< EOD
a:7:{s:19:"wp_inactive_widgets";a:0:{}s:9:"sidebar-1";a:1:{i:0;s:6:"text-3";}s:9:"sidebar-2";a:0:{}s:9:"sidebar-3";a:0:{}s:9:"sidebar-4";a:0:{}s:9:"sidebar-5";a:0:{}s:13:"array_version";i:3;}
EOD;

$serialize_widgets_text = <<< EOD
a:3:{i:2;a:0:{}i:3;a:3:{s:5:"title";s:5:"hello";s:4:"text";s:21:"saya hellokankamu yah";s:6:"filter";b:0;}s:12:"_multiwidget";i:1;}
EOD;

Maintenant nous pouvons les stocker dans la base de données:

$wpdb->update( $wpdb->options, array( 'option_value' => $serialize_sidebar_widgets ), array( 'option_name' => 'sidebars_widgets' ) );
$wpdb->update( $wpdb->options, array( 'option_value' => $serialize_widgets_text ), array( 'option_name' => 'widget_text' ) );

PS: Si nous stockons des widgets multi-instances, nous devons nous rappeler que ces derniers ont leur propre configuration. Par exemple, le widget texte est stocké dans 'widget_text'

PS: Lisez comment utiliser heredoc en PHP .

2
justjoe

Les widgets de la barre latérale sont stockés à plusieurs endroits dans la base de données. Pour être tout à fait honnête, je pense qu’il serait presque impossible que votre thème crée une barre latérale pré-remplie avec des widgets lorsqu’il installe pour la première fois.

Cependant , il existe toujours un moyen de configurer l'affichage d'un widget par défaut lorsque vous installez un thème pour la première fois. Si vous examinez le thème TwentyTen par défaut, vous verrez qu'il définit une liste de widgets "par défaut" qui seront chargés si l'utilisateur ne dispose pas de barre latérale dynamique:

<div id="primary" class="widget-area" role="complementary">
    <ul class="xoxo">
    <?php
        /* When we call the dynamic_sidebar() function, it'll spit out
         * the widgets for that widget area. If it instead returns false,
         * then the sidebar simply doesn't exist, so we'll hard-code in
         * some default sidebar stuff just in case.
         */
        if ( ! dynamic_sidebar( 'primary-widget-area' ) ) : ?>

            <li id="search" class="widget-container widget_search">
                <?php get_search_form(); ?>
            </li>

            <li id="archives" class="widget-container">
                <h3 class="widget-title"><?php _e( 'Archives', 'twentyten' ); ?></h3>
                <ul>
                    <?php wp_get_archives( 'type=monthly' ); ?>
                </ul>
            </li>

            <li id="meta" class="widget-container">
                <h3 class="widget-title"><?php _e( 'Meta', 'twentyten' ); ?></h3>
                <ul>
                    <?php wp_register(); ?>
                    <li><?php wp_loginout(); ?></li>
                    <?php wp_meta(); ?>
                </ul>
            </li>

    <?php endif; // end primary widget area ?>
    </ul>
</div><!-- #primary .widget-area -->

Ce bloc de code code en dur un widget de recherche, un widget archives et un widget méta. Assez basique, mais cela signifie que les nouveaux blogs montreront toujours quelque chose d’utile dans la barre latérale, même si le propriétaire n’a pas encore eu la possibilité de personnaliser le site.

Si vous visez pour créer "une liste de widgets qui est automatiquement installée lorsqu'un thème s'enregistre pour la première fois", c'est la manière la plus sûre et la plus conviviale de le faire.

2
EAMann