web-dev-qa-db-fra.com

Joindre l'image précédemment chargée à la publication - le code actuel a des résultats inattendus

Quel code fait actuellement:

Je nourris post post & image précédemment téléchargée, le code traite tout et fait la magie décrite ci-dessous. Résultat: ancienne image non attachée et nouvelle image attachée .


Ce dont j'ai besoin pour faire:

Joignez la même image comme vous pouvez le faire avec un écran média en quelques clics.


Q: Est-ce que quelqu'un connaît un correctif? Ou peut-être que j'ai commis une erreur quelque part? Tous les commentaires sont les bienvenus!


//Attach images to post    
$gallery_string = $_POST['my-gallery'];

if( !empty( $gallery_string ) ) {

    //It's a string (e.g '1424,3435,7544,7332') - turn it into array
    $gallery_array = explode(',', $gallery_string);

    foreach( $gallery_array as $value ) {

        //Full path of attachment
        $filename = get_attached_file( $value );

        //Path to the upload directory
        $wp_upload_dir = wp_upload_dir();

        //Type of file
        $filetype = wp_check_filetype( basename( $filename ), null );

        //Prepare an array of post data for the attachment
        $attachment = array(
          'guid'           => $wp_upload_dir['url'] . '/' . basename( $filename ),
          'post_mime_type' => $filetype['type'],
          'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
          'post_content'   => '',
          'post_status'    => 'inherit'
        );

        //Insert the attachment
        $attach_id = wp_insert_attachment( $attachment, $filename, $target_post_id );

        //Needed for wp_generate_attachment_metadata()
        require_once( ABSPATH . 'wp-admin/includes/image.php' );

        //Generate the metadata for the attachment and update the database record
        $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
        wp_update_attachment_metadata( $attach_id, $attach_data );

    }
}

Je sais que je pourrais utiliser le même identifiant d'image et wp_delete_attachment() pour le supprimer après la "duplication" mais quand même .. Pourquoi rendre les choses plus compliquées si (IF) y a-t-il un moyen de simplement l'attacher?

J'ai aussi examiné upload.php dans le dossier wp-admin pour connaître l'action à déclencher lorsque vous appuyez sur le bouton "joindre" de la page de support, mais il semble que cela ne puisse pas être utilisé dans notre code (si cela se produit, le processus est relativement fastidieux) .

1
N00b

La pièce jointe est juste la valeur post_parent de l'objet post joint, vous pouvez la mettre à jour via wp_update_post:

foreach( $gallery_array as $value ) {
    $the_post = array(
        'ID'            => $value,
        'post_parent'   => $target_post_id,
    );
    wp_update_post( $the_post );
}
0
Milo