Tabela compartilhada na rede

4

Estou atualmente criando um plug-in que lerá um arquivo xml e importará os dados em 4 tabelas em um multisite do wordpress. as tabelas são bastante grandes, com ALOT de colunas, portanto, a tabela de postagem não é adequada para essa tarefa. Todo "blog" na rede precisa ser capaz de acessar os dados desta tabela.

Eu tentei criar as tabelas seguindo as instruções do codex aqui usando a função dbDelta: enlace

mas em um multi-site isso cria um conjunto de tabelas para cada "blog" na rede. Isso é redundante, pois os dados seriam idênticos em todos os diferentes conjuntos de tabelas.

Eu tenho pesquisado, mas não consigo encontrar uma forma de fazer isso pelo WordPress.

Alguém tem idéias de como isso é melhor alcançado? Quando o plug-in é ativado em toda a rede, ele precisa criar um único conjunto de tabelas a serem acessadas de todos os blogs da rede

    
por Malibur 22.04.2015 / 17:05

2 respostas

4

Use $wpdb->base_prefix . 'table_name' como um nome de tabela quando quiser criar uma tabela para toda a rede ou quando desejar executar consultas nela.

$wpdb->base_prefix é sempre o prefixo da tabela principal da rede atual.

    
por fuxia 22.04.2015 / 17:10
2

Você deve criar uma tabela apenas na ativação, se não for criada, no banco de dados. Um pequeno exemplo de fonte deve ajudá-lo.

A fonte a seguir cria uma tabela, também em sites únicos, talvez o plugin seja ativado em modo único para cada lado da rede.

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

Se o seu plug-in for apenas para ativação de rede, adicione comentário ao blog principal do plug-in Network: TRUE . WP cheks isso e permitir a ativação apenas em toda a rede. Adicione também na fonte uma verificação para Multisite, como if (function_exists('is_multisite') && is_multisite()) .

Mas agora a parte importante é o valor do $wpdb global. Para criar uma tabela no namespace global, não para um site específico, use $wpdb->base_prefix , NOT $wpdb->prefix .

    
por bueltge 22.04.2015 / 17:33