カスタムテーブルで$ wpdb-> prefixを使用することは必須ですか


16

この質問が簡単な場合は申し訳ありません。WordPressでプラグインの開発を始めたばかりです。

すべてのチュートリアルで私はこれを見つけました:カスタムテーブルの作成中に$wpdb->prefix使用されます。

例:

$table_name = $wpdb->prefix . "liveshoutbox";

私の質問:

使用することは必須$wpdb->prefixですか?カスタムテーブルにプレフィックスを使用しないとどうなりますか?

回答:


22

強制ではありませんが、必須です。

同じデータベースに2つのWordpressサイトがセットアップされているシナリオを考えてください。1つはプレフィックスでwp_、もう1つはwp2_。プレフィックス付きの両方のサイトにプラグインをインストールすると、作成されたテーブルはwp_liveshoutbox最初のサイトとwp2_liveshoutbox2番目のサイト用になります。ただし、プレフィックスを省略すると、両方のサイトで同じ名前のテーブルが使用さliveshoutboxれ、すべてが分割されます。


12
つまり、必須です。:)
Rarst

4

以下を考慮してください。

プラグインは、サイトごとに異なるテーブルプレフィックスを使用するワードプレスネットワークで使用されます。プラグインは、同じデータベース内の836の異なるサイトで同時に実行できます。wp_385677_liveshoutbox完全に合理的なテーブル名です。

プラグインは、セキュリティの概念を持っているユーザーによってインストールさselect * from wp_usersれ、システムに注入しようとするボットをブロックするためにテーブルプレフィックスを変更しました。新しい脆弱性が見つかっても機能しません。

テーブル名をハードコーディングするなどのショートカットを取ることは、製品を起動して実行するための良い方法ですが、リリースするための良い方法ではありません。非常に短い時間でプラグインに「機能しない」コメントが山積みになります。最悪の場合、他の人のサイトを破壊します。

複雑なクエリがあり、作成の苦痛に対処したくない'select foo from ' . $wpdb->prefix . '_mytable left join ' . $wpdb->prefix . '_mytablemeta on ' . $wpdb->prefix . '.ID = ' . $wpdb->prefix . '.meta_id ....場合は、置換を使用できます。例えば:

$query = 'select foo from %table% left join %meta% on %table%.ID = %meta%.meta_id ... ';

$change = array (
    '%table%' => $wpdb->prefix . '_mytable',
    '%meta%'  => $wpdb->prefix . '_mytablemeta'
    );


$sql = str_replace( array_keys( $change ), array_values( $change ), $query );

$results = $wpdb->get_results( $sql );

Wordpressは常に変化しています。今日「機能する」ものは明日機能しない可能性があります。それがAPI関数がある理由です。Wordpress開発者は、パブリックAPIの動作が一貫していることを確認します(または、機能を減価します)。内部メソッド呼び出しを使用し始めると、それが「より高速」であるため、通常は戻ります。ソフトウェアには真のショートカットはほとんどありません-それらは必要な作業を今から後に移動するだけで、クレジットカードのように「後で」は通常より多くの費用がかかります。


これはマルチサイトに言及しているので、答えには表示されなかったことに注意する追加要素$wpdb->prefix . "users"は、マルチサイトのインストールで使用すると無効なテーブルになるということです。これは、テーブルにdbプレフィックスが付加されるためです。ただし、すべてのユーザーはネットワークユーザーであるため、マルチサイトは1つのユーザーテーブルのみを使用します。そのため、クエリにwp_usersテーブルまたはwp_usermetaテーブルが含まれる場合は、$wpdb->usersまたはを$wpdb->usermetaそれぞれ使用する必要があります。
butlerblog
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.