新しいデータベーステーブルを作成するプラグインがあります。プラグインを有効にすると、そのテーブルにすべての投稿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' );
ただし、プラグインをアクティブにする前に、手動で更新することなく挿入する方法が必要な投稿があります。
そのようです:
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;
キーを使用して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のマニュアルを確認してください。
ごめんなさい!ログインを失ったのを許してください、どうやら私は間違った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をオンにしましたが、詳細なエラーが表示されません。