web-dev-qa-db-ja.com

すべての投稿IDを新しいデータベーステーブルに挿入します

新しいデータベーステーブルを作成するプラグインがあります。プラグインを有効にすると、そのテーブルにすべての投稿IDを挿入する方法はありますか?

今はアクションフックを使って、私が公開した新しい投稿のIDをすぐに挿入しています。

function transfer_post_id($post_ID)  {
global $wpdb;
   if (!($wpdb->get_row("SELECT post_id FROM $my_table WHERE post_id = $post_ID" ) ) ) { //if post id not already added
      $wpdb->insert( $my_table, array( 'post_id' => $post_ID ) );      
   }
   return $post_ID;
}

add_action ( 'publish_post', 'transfer_post_id' );

ただし、プラグインをアクティブにする前に、手動で更新することなく挿入する方法が必要な投稿があります。

1
wpStudent

そのようです:

INSERT INTO $mytable (post_id)
SELECT ID
FROM $wpdb->posts as posts
LEFT JOIN $mytable as dup_check
ON dup_check.post_id = posts.ID
WHERE dup_check.post_id IS NULL;
6

キーを使用してIDが一度だけ存在できるようにテーブルを設計できます。その後、副選択を使用して既存のID値を直接選択する照会への挿入を実行できます。

そう( はDenis )をクレジットします。

INSERT INTO $mytable (post_id)
SELECT ID
FROM $wpdb->posts as posts
LEFT JOIN $mytable as dup_check
ON dup_check.post_id = posts.ID
WHERE dup_check.post_id IS NULL;

INSERTステートメントの構文 については、MySqlのマニュアルを確認してください。

5
hakre

ごめんなさい!ログインを失ったのを許してください、どうやら私は間違ったEメールを使いました。フォーラム管理者に連絡して、ユーザー名を回復する方法を確認します。

Denis、コードをありがとう!

私はそれをこんな感じで使っています

   $my_table = $wpdb->prefix . "rated_posts";

   $wpdb->query( "INSERT INTO $my_table (rated_post_id)
                SELECT ID
                FROM $wpdb->posts as posts
                LEFT JOIN $my_table as dup_check
                ON dup_check.rated_post_id = posts.ID
                WHERE dup_check.rated_post_id IS NULL" ); 

私はプラグインを無効にし、テストのための起動時に、私は得る

プラグインはアクティベーション中に663文字の予期しない出力を生成しました。 「ヘッダがすでに送信されています」というメッセージ、シンジケーションフィードに関する問題、その他の問題に気付いた場合は、このプラグインを無効にするか削除してください。

Wp_debugをオンにしましたが、詳細なエラーが表示されません。

0
wpStudent