質問

フロントページ項目を操作するために、複数の動的なサイドバーを作成しました。各サイドバーにはテキスト ウィジェットが含まれており、wp_options から各ウィジェットのコンテンツ (ウィジェット ID に従って) を取得したいと考えています。

基本的にその構造は、 dbName -> wp_options -> option_id #92 には次のものが含まれます。

a:9:{i:2;a:0:{}i:3;a:3:
{s:5:"title";s:0:"";s:4:"text";s:2:"mainItem";s:6:"filter";b:0;}i:4;a:3:
{s:5:"title";s:0:"";s:4:"text";s:9:"leftThree";s:6:"filter";b:0;}i:5;a:3:
{s:5:"title";s:0:"";s:4:"text";s:10:"rightThree";s:6:"filter";b:0;}i:6;a:3:
{s:5:"title";s:0:"";s:4:"text";s:8:"rightTwo";s:6:"filter";b:0;}i:7;a:3:
{s:5:"title";s:0:"";s:4:"text";s:8:"rightOne";s:6:"filter";b:0;}i:8;a:3:
{s:5:"title";s:0:"";s:4:"text";s:7:"leftOne";s:6:"filter";b:0;}i:9;a:3:
{s:5:"title";s:0:"";s:4:"text";s:7:"leftTwo";s:6:"filter";b:0;}
s:12:"_multiwidget";i:1;}

[実際にはすべて 1 行にあります。]

次の文字列を取得したいと考えています。

  • メインアイテム
  • 左1/左2/左3
  • 右1/右2/右3

このようなクエリの構文は何でしょうか?また、それを PHP テンプレートに追加するにはどうすればよいでしょうか?

役に立ちましたか?

解決

あなたがそうのようなデータベースからウィジェットのタイプについての情報のすべてを引き出すことができます:

$text_widgets = get_option( 'widget_text' );

これを取得するためにMySQLを使用する必要はありません。これは、タイプ「テキスト」の全て保存されたウィジェットの配列を返します。そして、あなたはこの配列をループができるので、などの各の内部プロパティを持つものを行うます:

foreach ( $text_widgets as $widget ) {
    extract( $widget );
    // now you have variables: $mainItem, $leftOne, $leftTwo, etc.
    // do something with variables  
}

それとも、あなたはすでにあなたと対話したいウィジェットのIDを知っていれば、あなたはこのようなプロパティにアクセスすることができます:

$mainItem = $text_widgets[17]['mainItem'];

他のヒント

のコードスニペットの下に試してみてください。これは、データを保存されているすべてのウィジェットの配列を返します。

//  1. Initialize variables
$data = '';
$all_stored_widgets = array();

//  2. Get all widgets using - `$GLOBALS['wp_widget_factory']`
$all_widgets = $GLOBALS['wp_widget_factory'];
foreach ($all_widgets->widgets as $w => $value) {

    $widget_data = get_option( 'widget_' . $value->id_base );

    foreach ($widget_data as $k => $v) {
        if( is_numeric( $k ) ) {
            $data['id'] = "{$value->id_base}-{$k}";
            $data['options'] = $v;
            $all_widgets_css[$value->id_base][] = $data;
        }
    }
}

// 3. Output:
echo '<pre>';
print_r( $all_stored_widgets );
echo '</pre>';

出力:

" ここに画像の説明を入力する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top