web-dev-qa-db-fra.com

Ajouter une galerie d'images à un type de message personnalisé?

Je suis en train d'extraire des données d'un service Web externe dans un type de publication personnalisé. Ces données incluent des images. Comment créer une galerie d'images, y ajouter des pièces jointes existantes et l'associer à une publication?

J'espérais trouver quelque chose comme un équivalent set_post_gallery de la fonction get_post_gallery, mais je ne trouve rien de tel dans le codex, sur Google ou dans wp-includes/media.php.

Voici comment j'ai configuré les pièces jointes:

$attachment = [
  'guid' => wp_upload_dir()[ 'url' ] . '/' . basename( $path ),
  'post_mime_type' => wp_check_filetype( basename( $path ), null )[ 'type' ],
  'post_title' => "$mlsNum $id",
  'post_content' => '',
  'post_status' => 'inherit'
];

$attachmentId = wp_insert_attachment( $attachment, $path, $this->postId );

// Generate attachment metadata and create resized images.
wp_update_attachment_metadata( $attachmentId, wp_generate_attachment_metadata( $attachmentId, $path ));

Et voici comment j'essaye de récupérer la galerie pour le thème:

$gallery = get_post_gallery( $post, false );
var_dump( $gallery );
var_dump( $post );

$post est défini et $gallery est faux. J'avais l'impression que wp_insert_attachment créerait une galerie pour le message et y ajouterait la pièce jointe, mais apparemment, ce n'est pas le cas. Si c'était le cas, cela me poserait d'autres problèmes lorsque je joindrai un PDF à la publication.

1
Dan Ross

Lorsque vous ne disposez que de fichiers d’image bruts que vous souhaitez affecter à une publication, wp_insert_attachment fera le travail.

Avec les pièces jointes déjà présentes dans votre base de données, vous pouvez utiliser wp_update_post pour définir le post_parent de la pièce jointe. Comme ça:

wp_update_post( array(
    'ID' => $attachment_id,
    'post_parent' => $parent_post_id,
));

Pour recevoir les pièces jointes d'un message, vous pouvez utiliser get_children.

$args = array(
    'post_parent' => $parent_post_id,
    'post_type' => 'attachment',
);
$attachments = get_children( $args );

Si vous insistez pour utiliser get_post_gallery– qui ne renverra que des pièces jointes à une image, vous devez ajouter le shortcode [gallery] au contenu de votre publication parent.

2
Jörn Lund

Il y a ici une excellente solution PHP qui ajoutera l'éditeur de galerie à l'éditeur de type d'article personnalisé - super, comme moi, vous créez des types d'article personnalisés avec PHP et importez des données à l'aide de WPAllImport . Dans ce cas, je veux m'assurer d'utiliser la galerie par défaut afin de permettre à mes clients de modifier/ajouter/supprimer des images importées.

Le code ci-dessous ajoute l'éditeur de galerie à l'interface de votre éditeur de type de message personnalisé:

https://Gist.github.com/alexdunae/897503

1
Dave Hilditch