Liste de toutes les options de site dans le tableau de bord

4

Je sais que je peux visiter /wp-admin/options.php sur une installation unique (ou sur un sous-site sur une installation multisite), et cela me donnera une liste formatée de toutes les options de la table de base de données {prefix}opitions du site. .

Comment puis-je obtenir une liste similaire dans le tableau de bord du réseau pour la table {prefix}sitemeta ?

    
posée shea 19.01.2013 - 03:11

1 réponse

6

Il n'y a pas de fonction pour ça. Mais vous pouvez utiliser une requête SQL personnalisée comme celle-ci…

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

… pour obtenir toutes les options non transitoires.

Exemple de base:

/**
 * 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>';
    }
}
    
réponse donnée fuxia 19.01.2013 - 04:37

Lire d'autres questions sur les étiquettes