web-dev-qa-db-fra.com

Obtenir toutes les options sauvegardées par un autre plugin

Je développe un plug-in qui ajoute la possibilité d'importer/exporter des paramètres à partir d'un autre plug-in. Cependant, je n'ai pas accès aux identifiants d'options enregistrés par ce plug-in.

Est-il possible d'obtenir toutes les options enregistrées par un plug-in spécifique?

Ce que j'aimerais, c'est quelque chose comme ça:

get_plugin_options($pluginId); // returns all options ids in a array or similar

Je sais qu'il est possible de simplement regarder le code du plug-in et d'écrire les noms des options ... mais les noms d'options codées en dur ne seraient pas Nice.

Merci!

2
Caio_V

Votre meilleure option est susceptible de copier tous les noms dans votre plugin à utiliser pour la récupération. Bien sûr, cela pourrait changer lorsque le plugin est mis à jour. Lorsque les options sont enregistrées dans la base de données à l’aide de update_option (), rien n’indique de quel plugin elles proviennent, elles sont stockées n’importe où. Si les options utilisent toutes un préfixe particulier, vous pouvez créer une requête SQL pour les extraire de la table d'options en fonction de ce préfixe.

Par exemple, si le préfixe de toutes les options du plug-in était 'abcd_', vous pouvez utiliser une requête comme celle-ci:

select * from $wpdb->options where option_name like 'abcd_%'
2
Amanda Giles

Vous ne pouvez pas obtenir ces données sur une option déjà enregistrée par un plug-in, mais vous pouvez surveiller l'activité add_option, update_option et éventuellement get_option pour savoir quels plug-ins utilisent quelles options avec un retour arrière simple. Je vous ai concocté un petit extrait:

function gimme_your_options( $option_name ) {
    $blame = 'core';
    $debug_backtrace = debug_backtrace();
    foreach ( $debug_backtrace as $call ) {
        if ( empty( $call['file'] ) )
            continue;

        if ( ! preg_match( '#wp-content/((?:(?:mu-)?plugins|themes)/.+)#i', $call['file'], $matches ) )
            continue;

        $blame = $matches[1];
        break;
    }

    error_log( sprintf( 'blame %s for %s', $blame, $option_name ) );
}

add_action( 'add_option', 'gimme_your_options' );
add_action( 'update_option', 'gimme_your_options' );

Ne jetez pas Jetpack sous le bus, mais voici un exemple de réponse dans my error.log:

[23-Mar-2015 05:39:27 UTC] blame core for active_plugins
[23-Mar-2015 05:39:27 UTC] blame core for _transient_doing_cron
[23-Mar-2015 05:39:27 UTC] blame core for cron
[23-Mar-2015 05:39:27 UTC] blame core for cron
[23-Mar-2015 05:39:28 UTC] blame plugins/jetpack/class.jetpack.php for _transient_timeout_jetpack_https_test
[23-Mar-2015 05:39:28 UTC] blame plugins/jetpack/class.jetpack.php for _transient_jetpack_https_test
[23-Mar-2015 05:39:28 UTC] blame plugins/jetpack/class.jetpack-options.php for jetpack_options

J'espère que cela pourra aider.

Notez également qu'il peut y avoir des faux positifs, c'est-à-dire que si un plugin ajoute un planning cron, par exemple, la fonction serait celle qui accuse l'accès à l'option cron. Cependant, le plugin ne fonctionne certainement pas posséder cette option.

2
kovshenin

Je ne pense pas que ce soit possible ou une fonction universelle existe. Chaque fois que vous ajoutez une option, ajoutez une option_name et option_value - add_option() .

<?php add_option( $option, $value, $deprecated, $autoload ); ?>

Ainsi, chaque fois que des plugins ajoutent leurs options à la base de données, ils utilisent cette fonction et préfixent habituellement le nom de l’option avec le nom de l’option, quel que soit le plugin correspondant à wpseo_option_name ou woocommerce_option_name suivi de l’option choisie. Seuls les développeurs et leur documentation suivent les options qu'ils ont créées, pas vraiment WordPress. Il les loupe avec toutes les autres options créées par d'autres plugins, utilisateurs et WordPress lui-même.

Vous devez manuellement rechercher tous les noms d'options avec leur utilisation, si ils utilisent un préfixe et parcourir chacune de leurs options: $prefix_$option_name.

0
Howdy_McGee