web-dev-qa-db-fra.com

Utiliser une pièce jointe dans plusieurs messages

J'ai une pièce jointe dans un article et je souhaite l'attacher à un autre article sans le détacher du premier article, à l'aide de l'API WP.

3
thanassis

Ce n'est pas si simple de faire cela. Dans mon code, modifiez le champ post_parent de la pièce jointe avec le nouvel ID de publication.

//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 );

Si vous souhaitez dupliquer la pièce jointe et l'utiliser dans plusieurs publications, vous devez suivre les étapes suivantes: wp_insert_attachment . Il est également possible de copier $ attach dans un nouvel objet, mais vous devez désélectionner la propriété ID de cet objet. .

$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

Lorsque vous vous trouvez dans le média téléchargé dans l'écran d'édition, postulez simplement votre média précédemment attaché et intégrez-le dans votre nouvel article.

La relation entre les publications et les pièces jointes est conservée dans la base de données. Bien qu'une pièce jointe ne puisse appartenir qu'à un seul message, elle peut néanmoins être intégrée à de nombreux messages sans souci.

4
MichaelJames