Cum să adaug o galerie de imagini la un tip de postare personalizat?

24 mar. 2014, 06:14:59
Vizualizări: 16.9K
Voturi: 3

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.

1
Comentarii

Tocmai am verificat funcția get_post_gallery. Aceasta utilizează expresii regulate pentru a căuta shortcode-ul galeriei în conținutul postării. Asta înseamnă că dacă shortcode-ul nu este prezent, nu va fi returnată nicio galerie din postare.

Jörn Lund Jörn Lund
27 mar. 2014 12:11:41
Toate răspunsurile la întrebare 2
3

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.

24 mar. 2014 14:35:30
Comentarii

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...

Dan Ross Dan Ross
24 mar. 2014 20:49:45

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.

helgatheviking helgatheviking
27 mar. 2014 13:17:49

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!

Dan Ross Dan Ross
27 mar. 2014 18:38:25
1

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:

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

23 sept. 2014 17:19:59
Comentarii

Of, e un hack cu iframe... dar +1, pare că ar funcționa și nu avem nimic mai bun. Din cauza unor astfel de lucruri acum prefer puternic framework-urile în loc de CMS-uri.

Dan Ross Dan Ross
5 oct. 2014 22:40:29