Listagem de todas as opções do site no painel

4

Eu sei que posso visitar /wp-admin/options.php em uma única instalação (ou em um subsite em uma instalação multisite), e ele me fornecerá uma lista formatada de todas as opções na tabela {prefix}opitions do banco de dados do site .

Como posso conseguir uma lista semelhante no painel de rede para a tabela {prefix}sitemeta ?

    
por shea 19.01.2013 / 03:11

1 resposta

6

Não há nenhuma função para isso. Mas você pode usar uma consulta SQL personalizada como essa…

SELECT meta_key, meta_value
    FROM $wpdb->sitemeta
    WHERE site_id = $wpdb->siteid
        AND 'meta_key'  NOT  LIKE  '_site_transient%'
    ORDER BY meta_key

… para obter todas as opções não transitórias.

Exemplo básico:

/**
 * Plugin Name: T5 Multi-Site Options
 * Description: Add a page to show all network options.
 * Plugin URI:
 * Version:     2013.01.19
 * Author:      Thomas Scholz
 * Author URI:  http://toscho.de
 * Licence:     MIT
 * License URI: http://opensource.org/licenses/MIT
 * Network:     true
 */

add_action( 'network_admin_menu', array ( 'T5_MS_Options', 'register_admin_menu' ) );

class T5_MS_Options {

    public static function register_admin_menu()
    {
        return add_menu_page(
            'Network Options',
            'Network Options',
            'update_core',
            'network-options',
            array ( __CLASS__, 'render_page' )
        );
    }

    public static function render_page()
    {
        print '<h1>' . $GLOBALS['title'] . '</h1>';

        global $wpdb;

        $sql = "SELECT meta_key, meta_value
            FROM $wpdb->sitemeta
            WHERE site_id = $wpdb->siteid
                AND 'meta_key'  NOT  LIKE  '_site_transient%'
            ORDER BY meta_key";

        $options = $wpdb->get_results( $sql );

        if ( ! $options )
            return print "<p>Error: Could not find anything.</p>";

        $header = '<tr><th>Key</th><th>Value</th><th>Serialized</th></tr>';
        print '<table class="widefat">';
        print "<thead>$header</thead>";
        print "<tfoot>$header</tfoot>";

        foreach ( $options as $option )
        {
            print '<tr><td>' . $option->meta_key . '</td><td><pre>';
            $serialized = FALSE;
            $val = maybe_unserialize( $option->meta_value );

            if ( $val !== $option->meta_value )
                $serialized = TRUE;

            print htmlspecialchars( print_r( $val, TRUE ), ENT_QUOTES, 'utf-8', FALSE );

            print '</pre></td><td>' . ( $serialized ? 'yes' : 'no' ) . '</td></tr>';

        }

        print '</table>';
    }
}
    
por fuxia 19.01.2013 / 04:37