web-dev-qa-db-ja.com

外部ウィジェットからウィジェットデータにアクセスする方法

ウィジェットコードの外側からウィジェットのオプション設定にアクセスしようとしています。

ウィジェットの名前はcategory_gridで、名前はwidget_categoriesです。

他のサイトの質問に対する回答で提案されている次のコードを試しましたが、何も返されません。

<?php
$options = get_option( 'widget_category_grid' );
$cats = $options['widget_categories'];
echo $cats;
?>
1
jrcollins

まず、ウィジェットのデータのようなものはありません。これは、ウィジェットがサイト上のいくつかの場所に含まれている可能性があるためです。そのため、データはウィジェットではなく、そのウィジェットのインスタンスに属しています。このため、すべてのウィジェットはIDを取得します。ウィジェットインスタンスのIDを知りたい場合は、このコードを使用してバックエンドに表示することができます。

add_action('in_widget_form', 'wpse240327_get_widget_id');

function wpse240327_get_widget_id($widget_instance) {
    if ($widget_instance->number=="__i__"){
        echo '<p class="widget-id-message">' . __('Save the widget to get its ID','textdomain') . '</p>';
        }
    else {
        echo '<p class="widget-id-message">' . __('The widget ID is:','textdomain') . ' ' . $widget_instance->id . '</p>';
        }
    }

サイドバーからウィジェットを削除して後で元に戻すと、IDが変更されている可能性があることに注意してください。いずれにせよ、特定のウィジェットインスタンスを識別するためには、このIDが必要です。 IDには、名前と番号の2つの要素があります。どちらも必要です。

my_widget_name_777

それを分割しましょう:

$widget_name = 'my_widget_name';
$widget_instance = '777';

今、あなたはすべてのデータを格納する配列にアクセスする必要があるでしょう。すべてのウィジェットには独自のオプションがあり、その特定のウィジェットのすべてのインスタンスの配列を保持します。あなたはこのようにアクセスします。

$widget_instances = get_option('widget_' . $widget_name);

これはあなたにキーが数によって形成されるインスタンスを持つ配列を与えるので、あなたはあなたのデータを得るでしょう:

$data = $widget_instances[$widget_instance];
2
cjbj