it-swarm.com.de

Holen Sie sich alle Optionen von einem anderen Plugin gespeichert

Ich entwickle ein Plug-In, das die Möglichkeit bietet, Einstellungen von einem anderen Plug-In zu importieren/exportieren. Ich habe jedoch keinen Zugriff auf die Options-IDs, die von diesem Plug-in gespeichert wurden.

Können alle Optionen von einem bestimmten Plug-In gespeichert werden?

Was ich möchte, ist ungefähr so:

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

Ich weiß, es ist möglich, nur den Plug-In-Code zu betrachten und die Optionsnamen aufzuschreiben ... aber hartcodierte Optionsnamen wären nicht nett.

Vielen Dank!

2
Caio_V

Ihre beste Option ist wahrscheinlich, alle Namen in Ihr Plugin zu kopieren, um sie zum Abrufen zu verwenden. Dies kann sich natürlich ändern, wenn das Plugin aktualisiert wird. Wenn Optionen mit update_option () in der Datenbank gespeichert werden, gibt es keinen Hinweis darauf, von welchem ​​Plugin sie stammen und wo immer gespeichert werden. Wenn die Optionen jedoch alle ein bestimmtes Präfix verwenden, können Sie eine SQL-Abfrage erstellen, um sie basierend auf diesem Präfix aus der Optionstabelle abzurufen.

Wenn zum Beispiel das Präfix für alle Optionen des Plugins 'abcd_' wäre, könnten Sie eine Abfrage wie die folgende verwenden:

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

Sie können diese Daten nicht für eine Option abrufen, die bereits von einem Plugin gespeichert wurde. Sie können jedoch die add_option-, update_option- und möglicherweise get_option-Aktivität überwachen, um herauszufinden, welche Plugins welche Optionen mit einfachem Backtracing verwenden. Ich habe einen kleinen Ausschnitt für dich zusammengestellt:

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

Jetpack nicht unter den Bus werfen, aber hier ist eine Beispielantwort in meinem 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

Hoffentlich hilft das.

Beachten Sie auch, dass es zu Fehlalarmen kommen kann, dh wenn ein Plugin zum Beispiel einen Cron-Zeitplan hinzufügt, wird die Funktion für den Zugriff auf die Cron-Option verantwortlich gemacht, das Plugin jedoch mit Sicherheit nichtowndiese Option.

2
kovshenin

Ich denke nicht, dass dies möglich ist oder eine universelle Funktion dafür existiert. Wenn Sie eine Option hinzufügen, fügen Sie dazu einen option_name und einen option_value - add_option() hinzu.

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

Jedes Mal, wenn Plugins ihre Optionen zur Datenbank hinzufügen, verwenden sie diese Funktion undnormalerweisestellen dem Optionsnamen das Präfix voran, worum es in ihrem Plugin bei wpseo_option_name oder woocommerce_option_name geht, gefolgt von der jeweiligen Option. Nur die Entwickler und ihre Dokumentation verfolgen die Optionen, die sie erstellt haben, WordPress nicht wirklich. Es zeigt ihnen nur alle anderen Optionen, die von anderen Plugins, Benutzern und WordPress selbst erstellt wurden.

Sie müssten manuell alle Optionsnamen herausfinden, die sie verwenden,wennsie ein Präfix verwenden, und jede ihrer Optionen durchlaufen: $prefix_$option_name.

0
Howdy_McGee