web-dev-qa-db-fra.com

Table de base de données personnalisée pour le plug-in ne créant pas à l'activation

Permettez-moi de commencer par dire que je sais qu'il existe d'autres messages à ce sujet et que de nombreux documents sont disponibles pour ce sujet, mais aucune de ces ressources ne m'a pas aidé à résoudre mon problème.

Je suis un débutant dans la création de plugins pour WordPress. C'est mon premier, alors je suis sûr qu'il me manque quelque chose de simple, mais tout ce que j'ai lu dit que cela devrait fonctionner.

Le plugin n'active pas de problème, mon menu apparaît, etc. Mais ce qui suit ne crée pas de nouvelle table dans la base de données. J'ai tout supprimé sauf l'id juste pour voir si c'était la syntaxe SQL, toujours aucun résultat.

register_activation_hook( __FILE__, 'pf_rb_install' );      
function pf_rb_install() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'pf_parts';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE '$table_name' (
            id mediumint(9) NOT NULL AUTO_INCREMENT,
            PRIMARY KEY (id)
            ) $charset_collate;";

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

Merci d'avance pour votre aide.

2
Rich Bannon

Voici une version mise à jour de pf_rb_install().

$table_name ne doit pas figurer entre guillemets dans la table de création SQL. Les guillemets auraient dû déclencher une erreur qui apparaîtrait dans le fichier error.log de PHP. En outre, il devrait y avoir deux espaces après la partie PRIMARY KEY (id) de l'instruction SQL.

register_activation_hook( __FILE__, 'pf_rb_install' );
function pf_rb_install() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'pf_parts';
    $pf_parts_db_version = '1.0.0';
    $charset_collate = $wpdb->get_charset_collate();

    if ( $wpdb->get_var( "SHOW TABLES LIKE '{$table_name}'" ) != $table_name ) {

        $sql = "CREATE TABLE $table_name (
                        id mediumint(9) NOT NULL AUTO_INCREMENT,
                        PRIMARY KEY  (id)
                        ) $charset_collate;";

        require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
        dbDelta( $sql );
        add_option( 'pf_parts_db_version', $pf_parts_db_version );
    }
}

Le code a également un numéro de version ajouté, ce qui vous aidera si des modifications sont apportées au schéma de la base de données. Enfin, une vérification a été ajoutée pour que le code de création de la base de données ne soit exécuté que si la table n'existe pas. Vous trouverez plus d'informations sur la création de tableaux personnalisés dans l'article du Codex Création de tableaux avec des plugins .

0
Dave Romsey

On dirait que votre déclaration SQL est un peu en retrait. Essaye ça:

function pf_rb_install() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'pf_parts';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
            id mediumint(9) NOT NULL AUTO_INCREMENT,
            PRIMARY KEY  (id)
            )
            COLLATE $charset_collate";

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

Remarque: PRIMARY KEYDOITavoir deux espaces après celui-ci.

0
Cedon