web-dev-qa-db-ja.com

添付ファイルの親投稿IDをコードで設定する方法

私はいくつかの問題でインポートされたワードプレスサイトを継承しました。アタッチメントIDとポストIDのリストがありますが、コードでそれらを再接続する必要があります。

私はこのようなすべての添付ファイルのリストを持っています。

  $attachments = get_posts( array('post_type' => 'attachment','posts_per_page' => -1));

  foreach ( $attachments as $key=>$attachment ) {
  }

添付ファイルのID、およびそれらが関連する投稿のCSVもあります。今度はすべてのアタッチメントの親の投稿IDは '0'です、私がする必要があるのはそれぞれを更新することですので、それはparnetの投稿IDは関連する

このループのキーワードプレス機能は、attachemnts parnetの投稿IDを設定しますか?そして、更新がすべてのメタデータにも伝播されるようにします。

.... set_attachemnt_parent_id($ attachment-> ID、$ myIdFromArchives);のようなものが欲しいのですが。

ご協力いただきありがとうございます!

編集 - データベースIDを直接更新しようとしましたが、うまくいきません。

2
Sean H

WordPressでは - 添付ファイルは 自身の投稿タイプ です。つまり、 wp_update_post() を使って投稿を更新するだけで済みます。

$media_post = wp_update_post( array(
    'ID'            => $attachment_id,
    'post_parent'   => $post_parent_id,
), true );

if( is_wp_error( $media_post ) ) {
    error_log( print_r( $media_post, 1 ) );
}

上記では、添付ファイルIDと添付ファイルの「親」となるPost IDの両方をwp_update_post()関数に渡しますが、何らかの理由で更新できない場合は を追加する必要があります。 WP_Errorerror_log にすると、問題のある部分をデバッグできます。

指定した添付ファイルIDが実際に添付ファイルであることを確認するために、wp_update_post()関数の前に追加のチェックを行うこともできます。これは単なるチェックですので、必要ないものを誤って更新することはありません。

if( 'attachment' === get_post_type( $attachment_id ) ) {
    // Update Post Code
}
3
Howdy_McGee