it-swarm-ru.tech

что такое option_name в базе данных, в которой хранится информация о текущем инициирующем виджете в боковой панели внешнего интерфейса?

что такое option_name в базе данных, в которой хранится информация о текущем инициирующем виджете в боковой панели внешнего интерфейса?

1
justjoe

Решаемые. То, что сказал EAmann, правильно. Проблема в настройке системы виджетов в WordPress. Для каждого виджета с несколькими экземплярами, такого как текст, информация хранится в другом имени опции, где значение каждого виджета хранится в последовательном порядке.

Хитрость заключается в том, как мы храним информацию о сериализованном текстовом виджете, которая иногда имеет специальные символы. Мы должны использовать heredoc. Использование heredoc позволяет избежать ситуации, когда строка должна содержать ['] и ["], потому что оба не могут использоваться вместе в одной строке.

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

Теперь мы можем хранить их в базе данных:

$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: если мы храним многоэкземплярные виджеты, то мы должны помнить, что виджеты имеют свою собственную конфигурацию. Например, текстовый виджет хранится в "widget_text"

PS: Прочтите, как использовать heredoc в PHP .

2
justjoe

Виджеты боковой панели хранятся в нескольких местах в базе данных. Честно говоря, я думаю, что было бы почти невозможно, чтобы ваша тема создала предварительно заполненную, виджетизированную боковую панель при первой установке.

Однако все еще есть способ настроить отображение виджетов по умолчанию при первой установке темы. Если вы посмотрите на тему TwentyTen по умолчанию, вы увидите, что она определяет список виджетов "по умолчанию", которые будут загружаться, если у пользователя нет динамической боковой панели:

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

Этот блок кода жестко кодирует виджет поиска, виджет архива и виджет мета. Довольно простой, но это означает, что новые блоги всегда будут показывать что-то полезное на боковой панели, даже если у владельца еще не было возможности настроить сайт.

Если вы стремитесь создать "список виджетов, который автоматически устанавливается при первой регистрации темы", то это самый безопасный и самый удобный способ сделать это.

2
EAMann