Tabla compartida en la red

4

Actualmente estoy creando un complemento que leerá un archivo xml e importará los datos en 4 tablas en un multisitio de wordpress. Las tablas son bastante grandes, con un montón de columnas, por lo que la tabla de correos no es adecuada para esta tarea. Cada "blog" en la red debe poder acceder a los datos de esta tabla.

He intentado crear las tablas siguiendo las instrucciones del códice aquí usando la función dbDelta: enlace

pero en un sitio múltiple, esto crea un conjunto de tablas para cada "blog" en la red. Esto es redundante ya que los datos serían idénticos en todos los diferentes conjuntos de tablas.

He estado buscando en Google, pero realmente no puedo encontrar una forma de WordPress de hacer esto.

¿Alguien tiene ideas como yo sobre la mejor manera de lograr esto? Cuando el complemento se activa en toda la red, debe crear un único conjunto de tablas a las que se pueda acceder desde todos los blogs de la red

    
pregunta Malibur 22.04.2015 - 17:05

2 respuestas

4

Utilice $wpdb->base_prefix . 'table_name' como nombre de tabla cuando desee crear una tabla para toda la red o cuando desee realizar consultas en ella.

$wpdb->base_prefix es siempre el prefijo de la tabla principal de la red actual.

    
respondido por el fuxia 22.04.2015 - 17:10
2

Debe crear una tabla solo en la activación, si no se crea, existe en la base de datos. Un pequeño ejemplo de fuente debería ayudarte.

La siguiente fuente crea una tabla, también en sitios individuales, tal vez el complemento se active en modo único para cada lado de la red.

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 su complemento es solo para la activación de la red, agregue un comentario al blog principal del complemento Network: TRUE . WP verifica esto y permite la activación solo en toda la red. También agregue en la fuente un cheque para Multisite, como if (function_exists('is_multisite') && is_multisite()) .

Pero ahora la parte importante es el valor para el $wpdb global. Para crear una tabla en el espacio de nombres global, no para un sitio específico use $wpdb->base_prefix , NOT $wpdb->prefix .

    
respondido por el bueltge 22.04.2015 - 17:33

Lea otras preguntas en las etiquetas