Table partagée sur le réseau

4

Je suis en train de créer un plugin qui va lire un fichier xml et importer les données dans 4 tables sur un multisite wordpress. les tables sont plutôt grandes, avec beaucoup de colonnes, donc la table post n'est pas adaptée à cette tâche. Chaque "blog" sur le réseau doit pouvoir accéder aux données de cette table.

J'ai essayé de créer les tables en suivant les instructions du codex à l'aide de la fonction dbDelta: enlace

mais sur un multisite, cela crée un ensemble de tables pour chaque "blog" du réseau. Ceci est redondant car les données seraient identiques pour tous les différents ensembles de tables.

J'ai cherché sur Google, mais je ne trouve pas vraiment de moyen de le faire avec WordPress.

Quelqu'un a-t-il des idées sur la meilleure façon d'y parvenir? Lorsque le plug-in est activé sur l'ensemble du réseau, il doit créer un seul ensemble de tables accessible depuis tous les blogs du réseau

.     
posée Malibur 22.04.2015 - 17:05

2 réponses

4

Utilisez $wpdb->base_prefix . 'table_name' comme nom de table lorsque vous souhaitez créer une table pour l'ensemble du réseau ou que vous souhaitez exécuter des requêtes dessus.

$wpdb->base_prefix est toujours le préfixe de la table principale du réseau actuel.

    
réponse donnée fuxia 22.04.2015 - 17:10
2

Vous devez créer une table uniquement lors de l'activation. S'il n'est pas créé, existe dans la base de données. Un petit exemple de source devrait vous aider.

Les sources suivantes créent une table, également sur des sites uniques. Le plug-in sera peut-être activé en mode unique pour chaque côté du réseau.

register_activation_hook( __FILE__, 'on_activate' );
function on_activate() {

    create_table();
}

function create_table() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'your_table_name';

    // Check, if exists
    if ( $wpdb->get_var( "show tables like '{$table_name}'" ) == $table_name ) {
        return NULL;
    }

    $sql = "CREATE TABLE " . $table_name . " (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        col VARCHAR(100) NOT NULL,
        PRIMARY KEY  (id)
    );";

    // // make dbDelta() available
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}

Si votre plugin est uniquement destiné à l'activation réseau, ajoutez un commentaire au blog principal du plugin Network: TRUE . WP vérifie cela et permet l'activation uniquement sur l'ensemble du réseau. Ajoutez également dans la source une vérification de multisite, telle que if (function_exists('is_multisite') && is_multisite()) .

Mais maintenant, la partie importante est la valeur du global $wpdb . Pour créer une table dans l’espace de noms globals, pas pour un site spécifique, utilisez $wpdb->base_prefix , PAS $wpdb->prefix .

    
réponse donnée bueltge 22.04.2015 - 17:33

Lire d'autres questions sur les étiquettes