Cum să adaug o galerie de imagini la un tip de postare personalizat?
Extrag date dintr-un serviciu web extern într-un tip de postare personalizat. Aceste date includ imagini. Cum pot crea o galerie de imagini, să adaug unele atașamente existente și să le asociez cu o postare?
Ceea ce speram să găsesc este un fel de contrapartidă a funcției get_post_gallery
numită set_post_gallery
, dar nu am găsit nimic asemănător nici în codex, nici pe Google, nici în wp-includes/media.php
.
Iată cum am configurat atașamentele:
$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 );
// Generează metadatele atașamentului și creează imagini redimensionate.
wp_update_attachment_metadata( $attachmentId, wp_generate_attachment_metadata( $attachmentId, $path ));
Iar așa încerc să preiau galeria pentru tema:
$gallery = get_post_gallery( $post, false );
var_dump( $gallery );
var_dump( $post );
$post
este definit, dar $gallery
este false. Am presupus că wp_insert_attachment
ar crea automat o galerie pentru postare și ar adăuga atașamentul la ea, dar se pare că nu este cazul. Dacă ar fi fost așa, asta mi-ar crea alte probleme când voi atașa un PDF la postare.

Când ai doar fișiere de imagine brute pe care dorești să le atașezi unui articol, wp_insert_attachment
va face treaba.
Dacă atașamentele sunt deja prezente în baza de date, poți folosi wp_update_post
pentru a seta post_parent al atașamentului. Astfel:
wp_update_post( array(
'ID' => $attachment_id,
'post_parent' => $parent_post_id,
));
Pentru a obține atașamentele unui articol, poți folosi get_children
.
$args = array(
'post_parent' => $parent_post_id,
'post_type' => 'attachment',
);
$attachments = get_children( $args );
Dacă insiști să folosești get_post_gallery
– care returnează doar atașamentele de tip imagine – ar trebui să adaugi shortcode-ul [gallery]
în conținutul articolului părinte.

Am crezut și eu că wp_insert_attachment
va adăuga atașamentul în galeria implicită a postării, creând-o dacă este necesar, dar codex-ul nu face nicio asemenea promisiune (și magia nu funcționează pentru mine). Mă întreb cum creează interfața de administrare galeriile...

Nu există o galerie implicită de care să știu. O galerie este identificată doar prin ID-urile imaginilor din shortcode-ul galeriei. Ai putea folosi get_children()
cum a fost sugerat pentru a obține toate atașamentele, sau alternativ să salvezi ID-urile atașamentelor ca meta pentru postarea părinte.

Am folosit get_children
și am verificat mime_type
ca o soluție temporară, dar voi trece la metoda shortcode-ului [gallery]
astfel încât utilizatorul să poată edita galeria folosind managerul media WP în pagina de editare a postării. Acest lucru va face și integrarea plugin-ului cu temele altor persoane mai ușoară. Nu sunt primul care lucrează la acest site și probabil nu voi fi ultimul. Se simte puțin hack-ish să modific conținutul postării pentru a manipula galeria, dar va face treaba și nu există o metodă mai bună. Mulțumesc Jörn!

Există o soluție PHP excelentă care va adăuga editorul de galerie în editorul tipurilor de postare personalizate - perfect, dacă, ca mine, creați tipuri de postare personalizate folosind PHP și importați date folosind WPAllImport. În acest caz, vreau să mă asigur că folosesc galeria implicită pentru a permite clienților mei să editeze/adaugă/șteargă imaginile importate.
Codul de mai jos adaugă editorul de galerie în interfața editorului tipurilor de postare personalizate:
