ti-enxame.com

o que é option_name no banco de dados que armazena as informações do widget de inicialização atual na barra lateral frontend?

o que é option_name no banco de dados que armazena as informações do widget de inicialização atual na barra lateral frontend?

1
justjoe

Resolvido O que EAmann disse está certo. O problema está na configuração do sistema de widgets no WordPress. Para cada widget de várias instâncias, como texto, as informações são armazenadas em um nome de opção diferente, em que o valor de cada widget é armazenado de maneira serializada.

O truque é sobre como armazenamos as informações do widget de texto serializado que às vezes tem caracteres especiais. Nós devemos usar heredoc. O uso de heredoc é para evitar a situação quando uma string deve conter ['] e ["], porque ambos não podem ser usados ​​em uma linha juntos.

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

Agora podemos armazená-los no banco de dados:

$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: Se nós armazenarmos widgets de várias instâncias, devemos nos lembrar que os widgets têm sua própria configuração. Por exemplo, o widget de texto é armazenado em 'widget_text'

PS: Leia como usar o heredoc no PHP .

2
justjoe

Os widgets da barra lateral são armazenados em vários lugares no banco de dados. Para ser perfeitamente honesto, acho que seria quase impossível que seu tema criasse uma barra lateral pré-preenchida e widget quando fosse instalada pela primeira vez.

No entanto , ainda há uma maneira de configurar uma exibição de widget padrão para quando você instala um tema pela primeira vez. Se você der uma olhada no tema TwentyTen padrão, verá que ele define uma lista de widgets "padrão" que serão carregados se o usuário não tiver uma barra lateral dinâmica:

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

Esse bloco de código codifica com segurança um widget de pesquisa, um widget de arquivos e um widget de meta. Bastante básico, mas significa que novos blogs sempre mostrarão algo útil na barra lateral, mesmo que o proprietário ainda não tenha tido a oportunidade de personalizar o site.

Se você está filmando para criar "uma lista de widgets que é instalada automaticamente quando um tema é registrado pela primeira vez", essa é a forma mais segura e amigável de fazer isso.

2
EAMann