web-dev-qa-db-ja.com

フロントエンドサイドバーに現在の開始ウィジェットの情報を格納するデータベース上のoption_nameは何ですか?

フロントエンドサイドバーに現在の開始ウィジェットの情報を格納するデータベース上のoption_nameは何ですか?

1
justjoe

解決しました。 EAmannが言ったことは正しいです。問題はWordPressのウィジェットシステムの設定にあります。テキストなどのマルチインスタンスウィジェットごとに、情報はさまざまなオプション名に格納され、各ウィジェットの値はシリアル化された方法で格納されます。

トリックは、シリアル化されたテキストウィジェットの情報を格納する方法です。我々はheredocを使わなければなりません。 heredocを使用するのは、文字列に[']と["]を含める必要がある場合の状況を回避するためです。両方を1行で同時に使用することはできません。

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

シモンズ:もし我々がマルチインスタンスウィジェットを保存するならば、その時我々はウィジェットがそれら自身の設定を持っていることを覚えておくべきです。たとえば、テキストウィジェットは '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