サポート » 使い方全般 » 実行前のSQL文について

  • WordPressが自動的に発行しているSQL文を実行される前に編集や置換する事は可能ですか?
    そういったフック等有りますでしょうか。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • たとえば、どのような書き換えをしたいのですか?

    トピック投稿者 Yu0390

    (@yu0390)

    kjmtshさん、ご回答いただき有難うございます。

    2つのWordPressが動いている環境で、かつDBは共通で使用しています。
    プレフィックスを変えて、それぞれで動かしているのですが、互いの記事を
    検索し表示し合えたらと考えておりまして。

    実行前に、str_replaceとかでプレフィックを書き換えられないかと思いまして。
    不可能でしょうか?

    「WordPressが自動的に発行しているSQL文」というのは、メインクエリのことだと思いますが、基本的に WordPress の SQL 文は、wp-includes/query.php が一手に引き受けていて、これにはプレフィクスを変更する API が用意されていません。

    もし、やるとするなら、実際にデータベースへの要求を担当する $wpdb クラス(wp-includes/wp-db.php)が初期化されるタイミングでだと思いますが、これは、wp-includes/load.php の中で行われています。ここで初期化された $wpdb クラスを利用して、WP_Query クラスが SQL をデータベースに発行します。

    見た感じでは、メインクエリのテーブルプレフィクスを変更できる方法は、1つだけあります。実は、load.php で、wp-db.php を読み込むときに、wp-content/db.php があれば、それを読み込むようになっているのです。このファイルを作って、

    class myWPDB extends wpdb {
        ....
    }
    if (!isset($wpdb)) {
        global $wpdb;
        $wpdb = new myWPDB( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST );
    }

    と、別クラスを作れば、SQL 文はかならず $wpdb->query() 関数を通過しますので、ここで待ち構えて、str_replace() すれば動的に変更できると思います。$wpdb の参照の変更だけではだめで、後でコアに書き換えられてしまいます。$wpdb->query() に飛んできた SQL 文を地道に replace する以外にはないと思います。ただし、条件を厳密に指定しないと、全ての SQL 文が書き変わってしまうので、取扱いには十分注意してください。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「実行前のSQL文について」には新たに返信することはできません。