it-swarm.cn

什么是数据库中的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: 阅读如何在PHP中使用heredoc

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