WordPress で MySQL クエリを使用してウィジェット データを取得する
-
18-09-2019 - |
質問
フロントページ項目を操作するために、複数の動的なサイドバーを作成しました。各サイドバーにはテキスト ウィジェットが含まれており、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>';
出力:
所属していません StackOverflow