web-dev-qa-db-ja.com

複数の投稿で添付ファイルを使用する

投稿に添付ファイルがあり、WP AP​​Iを使用して、最初の投稿から添付ファイルを削除せずに、別の投稿に添付したいと考えています。

3
thanassis

これを行うのはそれほど簡単ではありません。私のコードでは、post_parentフィールドを新しい投稿IDの添付ファイルから変更してください。

//take all image-attachments from a post to create post for each 
    $images =& get_children( array (
                        'post_parent' => $event_id,
                        'post_type' => 'attachment',
                        'post_mime_type' => 'image'
                    ));


            if ( empty($images) ) {
                // no attachments here
            } else { 
                //handle each attachment
                foreach ( $images as $attachment_id => $attachment ) {

                    $this->addPost( $post_id, $attachment_id, $attachment );
                }
....

...
function addPost($post_id, $attach_id, $attach)
        {
            // Create post object

            $new_post = array(
            'post_title'    => 'title',
            'post_status'   => 'publish',
            'post_author'   => 1,
            'post_type'     => 'post'
            );

            // Insert the post into the database
            // create new post that want to reattach the attatchment


            $this->unhookFromSavePost(); // see http://codex.wordpress.org/Plugin_API/Action_Reference/save_post#Avoiding_infinite_loops
            $new_post_id = wp_insert_post( $new_post ); //get post's id 
            $this->hookToSavePost();
            $attach->post_parent = $new_post_id; // post_id 
            $newAddedAttachment = wp_insert_attachment( $attach );

添付ファイルを複製して他の投稿で使用する場合は、次の手順に従ってください: wp_insert_attachment 。また、$ attachを新しいオブジェクトにコピーすることも可能ですが、このオブジェクトのIDプロパティを設定解除する必要があります。 。

$new_attach = $attach;
$new_attach->post_parent = $new_post_id;
unset($new_attach[0]);     // unset first property or unset($new_attach[ID]);
wp_insert_attachment( $new_attach);
2
thanassis

投稿編集画面にアップロードされたメディアの内側にある場合は、以前に添付されたメディアを検索して、新しい投稿に埋め込むだけです。

投稿と添付ファイルの関係はデータベースに保存されます。添付ファイルは1つの投稿にしか属することができませんが、それでも心配せずに多くの投稿に埋め込むことができます。

4
MichaelJames