web-dev-qa-db-ja.com

起動時にプラグイン用のカスタムデータベーステーブルが作成されない

これについては他にも記事があり、このトピックに関する多くの文書が利用可能であることを私が知っていると言うことから始めましょう。

私はWordPress用のプラグインを作成することに初心者です。これが私の最初です、だから私は単純な何かが欠けていると確信しています、しかし私が読んだすべてはこれが働いているべきであると言います。

このプラグインは問題なく起動し、私のメニューが表示される、などとなります。しかし、以下はデータベースに新しいテーブルを作成しません。 SQL構文であるかどうかを確認するためだけに、ID以外のすべてを削除しましたが、まだ結果は得られません。

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

ご協力ありがとうございます。

2
Rich Bannon

これがpf_rb_install()の更新版です。

テーブル作成SQLでは、$table_nameは引用符で囲まないでください。引用符は、PHPのerror.logファイルに現れるエラーを引き起こすはずです。また、SQLステートメントのPRIMARY KEY (id)部分の後には2つのスペースが必要です。

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

このコードにはバージョン番号も追加されており、将来データベーススキーマが変更された場合に役立ちます。最後に、テーブルが存在しない場合にのみデータベース作成コードが実行されるようにチェックが追加されました。カスタムテーブルの作成に関する詳細は、Codexの記事 プラグインを使ったテーブルの作成 にあります。

0
Dave Romsey

SQLステートメントが少しずれているようです。これを試して:

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

注:PRIMARY KEYMUSTの後にはスペースが2つあります。

0
Cedon