it-swarm-eu.dev

co je option_name v databázi, která ukládá informace o aktuálním widgetu inicializace v postranním panelu frontendu?

co je option_name v databázi, která ukládá informace o aktuálním widgetu inicializace v postranním panelu frontendu?

1
justjoe

Vyřešeno. To, co EAmann řekl, je správné. Problém je v konfiguraci widgetového systému ve WordPressu. U každého widgetu s více instancemi, jako je text, jsou informace uloženy v jiném volitelném názvu, kde je hodnota každého úložiště widgetů serializovaným způsobem.

Trik je o tom, jak ukládáme informace o widgetu serializovaného textu, který má někdy speciální znaky. Musíme použít heredoc. Použití heredoc je vyhnout se situaci když řetězec musí obsahovat ['] a ["], protože oba nemohou být použity na jednom řádku dohromady.

$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;

Nyní je můžeme uložit do databáze:

$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: Pokud ukládáme víceinstanční widgety, měli bychom si uvědomit, že widgety mají svou vlastní konfiguraci. Textový widget je například uložen ve formátu „widget_text“

PS: Přečtěte si, jak používat heredoc v PHP .

2
justjoe

Widgety postranního panelu jsou uloženy na více místech v databázi. Chcete-li být naprosto upřímný, myslím, že by bylo vedle nemožné, aby vaše téma vytvořit pre-obydlené, widgetized sidebar, když se nejprve nainstaluje.

Nicméně , stále existuje způsob, jak nastavit výchozí displej widgetu při první instalaci motivu. Pokud se podíváte na výchozí motiv TwentyTen, uvidíte, že definuje seznam „výchozích“ widgetů, které budou načteny, pokud uživatel nemá dynamický postranní panel:

<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 -->

Tento kód blokuje hardwarové kódy vyhledávacího widgetu, widgetu archivů a widgetu meta. Docela základní, ale znamená to, že nové blogy budou vždy zobrazovat v postranním panelu něco užitečného, ​​i když vlastník ještě neměl možnost stránky přizpůsobit.

Pokud fotografujete pro vytvoření "seznamu widgetů, které jsou automaticky nainstalovány při prvním zaregistrování motivu", je to nejbezpečnější a nejpříjemnější způsob, jak to udělat.

2
EAMann