web-dev-qa-db-fra.com

Comment accéder aux données du widget depuis un widget externe?

J'essaie d'accéder aux paramètres d'options d'un widget en dehors de son code.

Le nom du widget est: category_grid et le nom de celui-ci est: widget_categories.

J'ai essayé le code suivant qui avait été suggéré dans une réponse à une question sur un autre site, mais il ne renvoie rien:

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

Premièrement, les données d'un widget n'existent pas. En effet, un widget peut être inclus à plusieurs endroits sur un site. Les données n'appartiennent donc pas au widget, mais à l'instance de ce widget. Pour cette raison, chaque widget reçoit un identifiant. Si vous voulez savoir quel est l'ID d'une instance de widget, vous pouvez utiliser ce code pour l'afficher dans le backend.

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

Attention, si vous supprimez le widget de la barre latérale et le replacez ultérieurement, l'ID peut avoir changé. Dans tous les cas, vous avez besoin de cet ID pour identifier une instance de widget spécifique. L'ID a deux composants: un nom et un numéro, dont vous aurez besoin tous les deux:

my_widget_name_777

Séparons cela:

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

Maintenant, vous devrez accéder au tableau qui stocke toutes les données. Chaque widget a sa propre option, qui contient un tableau de toutes les instances de ce widget particulier. Vous y accédez comme ceci:

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

Cela vous donne un tableau avec des instances dont les clés sont formées par un nombre, vous obtiendrez ainsi vos données à:

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