Obtenga todas las opciones guardadas por otro complemento

2

Estoy desarrollando un complemento que agrega la posibilidad de importar / exportar configuraciones desde otro complemento. Sin embargo, no tengo acceso a los identificadores de opciones guardados por ese complemento.

¿Es posible obtener todas las opciones guardadas por un complemento específico?

Lo que me gustaría es algo como esto:

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

Sé que es posible simplemente mirar el código del complemento y escribir los nombres de las opciones ... pero los nombres de las opciones de codificación no serían agradables.

¡Gracias!

    
pregunta Caio_V 26.03.2015 - 22:25

3 respuestas

2

Es probable que su mejor opción copie todos los nombres en su complemento para usarlos en la recuperación. Por supuesto, esto podría cambiar cuando se actualice el complemento. Cuando las opciones se guardan en la base de datos utilizando update_option (), no hay ninguna indicación de qué complemento provienen y se almacena en cualquier lugar. Sin embargo, si todas las opciones usan un prefijo particular, podría construir una consulta SQL para extraerlas de la tabla de opciones basada en ese prefijo.

Por ejemplo, si el prefijo de todas las opciones para el complemento era 'abcd_', podría usar una consulta como esta:

select * from $wpdb->options where option_name like 'abcd_%'
    
respondido por el Amanda Giles 26.03.2015 - 22:42
2

No puede obtener esos datos en una opción ya guardada por un complemento, pero lo que puede hacer es monitorear la actividad add_option , update_option y posiblemente get_option para averiguar qué complementos están usando qué opciones con simple retracción Te preparo un pequeño fragmento para ti:

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

No lanzar Jetpack debajo del bus, pero aquí hay un ejemplo de respuesta en mi 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

Espero que ayude.

También tenga en cuenta que puede haber falsos positivos, es decir, si un complemento, por ejemplo, agrega un cronograma, la función sería la responsable de acceder a la opción cron, sin embargo, el complemento no es propio esa opción.

    
respondido por el kovshenin 27.03.2015 - 11:46
0

No creo que esto sea posible o existe una función universal para esto. Siempre que agregue una opción, agregue option_name y option_value - add_option() .

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

Entonces, cada vez que los complementos agreguen sus opciones a la base de datos, usan esa función y generalmente el nombre de la opción con lo que sea que sea el complemento aproximadamente wpseo_option_name o woocommerce_option_name seguido de lo que sea la opción. Solo los desarrolladores y su documentación hacen un seguimiento de las opciones que han creado, pero WordPress no. Simplemente los vincula con todas las demás opciones creadas por otros complementos, usuarios y el propio WordPress.

Tendría que averiguar manualmente todos los nombres de las opciones que utilizan, si están usando un prefijo, y recorrer cada una de sus opciones: $prefix_$option_name .

    
respondido por el Howdy_McGee 26.03.2015 - 22:39

Lea otras preguntas en las etiquetas