2009-11-07 75 views
2

我已經爲首頁項目操作構建了多個動態側欄。每個側欄包含一個Text小部件,並且我想從wp_options中檢索每個小部件的內容(根據小部件ID)。在WordPress中使用MySQL查詢檢索小部件數據

基本上,該結構是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;} 

[實際上所有在一行上。]

我想要檢索以下字符串:

  • mainItem
  • leftOne/leftTwo/leftThree
  • rightOne/rightTwo/rightThree

有什麼語法這樣的查詢?我如何將它添加到PHP模板?

回答

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

輸出:

enter image description here