2

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

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

a:9:{i:2;a:0:{}i:3;a:3:
{s:5:"タイトル";s:0:"";s:4:"テキスト";s:2:"メインアイテム";s:6:"フィルター";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:"タイトル";s:0:"";s:4:"テキスト";s:10:"rightThree";s:6:"フィルター";b:0;}i:6;a :3:
{s:5:"タイトル";s:0:"";s:4:"テキスト";s:8:"rightTwo";s:6:"フィルタ";b:0;}i:7;a :3:
{s:5:"タイトル";s:0:"";s:4:"テキスト";s:8:"rightOne";s:6:"フィルタ";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 行で。]

次の文字列を取得したい:

  • メインアイテム
  • leftOne/leftTwo/leftThree
  • 右ワン/右ツー/右スリー

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

4

2 に答える 2

3

次のように、データベースからウィジェットのタイプに関するすべての情報を引き出すことができます。

$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'];
于 2009-11-13T14:49:05.140 に答える
0

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

//  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>';

出力:

ここに画像の説明を入力

于 2016-06-15T13:25:35.733 に答える