Skip to content

Kaikki WordPressistä, web-kehityksestä — ja paljon muuta

🔧 WP All Import: miten kerätä kaikki julkaisun kuvat yhteen galleriaan

🔧 WP All Import: miten kerätä kaikki julkaisun kuvat yhteen galleriaan

Toin sata julkaisua WP All Import -työkalulla, ja kuvat levisivät sisältöön sattumanvaraisesti: toisissa kohdissa ne venyivät koko leveydelle, toisissa puristuivat tekstin viereen ja jossain roikkuivat rikkinäisinä linkkeinä. Jokaisen julkaisun läpikäyminen käsin on hukkaan heitetty ilta.

On olemassa tapa kerätä kaikki yhteen galleriaan. Automaattisesti, ilman manuaalista sisällön muokkausta. Menetelmä toimii sekä juuri tuoduille että kuukausi sitten ladatuille julkaisuille. Alla on kaksi lähestymistapaa: helppo (lennossa, pmxi_gallery_image-koukun kautta) ja jälkikäteen tehtävä (massapäivityksellä). Molemmat on testattu WP All Import -versiolla 4.9+.

💡 Nopea yleiskatsaus:

  • Valmistele CSV tai XML: kuvien linkit täysinä URL-osoitteina, yksi per rivi
  • Tuontipohjassa määritä Kuvat-osio ja osoita kenttä, jossa kuvat ovat
  • Lisää pmxi_gallery_image-koukku functions.php-tiedostoon, galleria kootaan automaattisesti tuonnin aikana
  • Vanhoille julkaisuille: funktio, joka korvaa <img>-tagit gallerian shortcodella, ja massapäivitys

Miten kuvat valmistellaan tuontia varten

Ennen tuonnin käynnistämistä kuvien linkkien on oltava oikeassa muodossa. WP All Import lataa kuvia vain, jos URL on täydellinen, suora ja osoittaa tiedostoon, ei HTML-sivulle.

Oletetaan, että vanhalla sivustolla galleria näyttää tältä:

1<a href="/cache/images/photo1.jpg" data-lightbox="group:1" title="Photo 1">
2 <img src="/cache/images/photo1_thumb.jpg" alt="Photo 1">
3</a>
4<a href="/cache/images/photo2.jpg" data-lightbox="group:1" title="Photo 2">
5 <img src="/cache/images/photo2_thumb.jpg" alt="Photo 2">
6</a>

Jäsentämisen jälkeen CSV-tuontitiedostossa linkkien on oltava täysiä URL-osoitteita, yksi per rivi, ilman HTML-kuorta:

1http://newsite.com/files/photo1.jpg
2http://newsite.com/files/photo2.jpg

Missä http://newsite.com on sen sivuston verkkotunnus, johon olet tuomassa. Kriittistä: jos linkit ovat suhteellisia tai osoittavat vanhaan verkkotunnukseen, WP All Import ei poimi tiedostoja eikä lataa niitä mediakirjastoon.

Julkaisun tekstiosassa olevien linkkien on vastattava yksi yhteen niiden linkkien kanssa, jotka syötät lisäosalle ladattavaksi. Muuten tuonnin jälkeen osa <img>-tageista jää vanhoilla URL-osoitteilla, eikä niitä sisällytetä galleriaan.

Tuontipohjan määrittäminen WP All Importissa

Lisäosan käyttöliittymässä siirry tuontipohjaan. Pääosio täällä on Images. Se näyttää tältä:

WP All Import -kuva-asetusten käyttöliittymä

Images-osiossa määritä kenttä, joka sisältää kuvien linkit. Yleensä tämä on erillinen CSV-solu (esimerkiksi gallery_images), jossa linkit on listattu erottimella, oletuksena |:

1http://newsite.com/files/photo1.jpg | http://newsite.com/files/photo2.jpg | http://newsite.com/files/photo3.jpg

WP All Import jäsentää merkkijonon, lataa jokaisen kuvan ja lisää sen WordPressin mediakirjastoon. Mutta kuvat on toistaiseksi vain liitetty julkaisuun liitetiedostoina. Kokoamme gallerian erikseen.

Varmista, miten lisäosa käsittelee latauksen. Klikkaa Preview & Test, sitten Run Test. Vihreä valintamerkki kuvien määrän vieressä tarkoittaa, että kaikki on määritetty oikein. Punainen rasti tarkoittaa, että tarkista URL-osoitteet: niiden on oltava täydellisiä ja suoria.

Ennen tuonnin aloittamista lataa kuvatiedostot sivuston juuressa olevaan files-kansioon, jos lisäosa hakee kuvat palvelimelta eikä ulkoisista URL-osoitteista.

Miten galleria kootaan lennossa: pmxi_gallery_image-koukku

Siistein tapa on koota galleria suoraan tuonnin aikana. WP All Import tarjoaa pmxi_gallery_image-koukun, joka laukeaa jokaiselle ladatulle kuvalle. Sieppaat liitetiedoston ID:n ja tallennat sen julkaisun metakenttään halutussa muodossa.

Kolme testattua vaihtoehtoa, valitse teemallesi tai gallerialisäosallesi sopiva.

Vaihtoehto 1: liitetiedostojen ID-taulukko. Sopii useimmille teemoille, jotka odottavat galleriaa liitetiedostojen ID-taulukkona:

1function my_gallery_ids($post_id, $att_id, $filepath, $is_keep_existing_images)
2{
3 $key = '_my_gallery';
4 $gallery = get_post_meta($post_id, $key, true);
5
6 if (empty($gallery)) {
7 $gallery = array();
8 }
9
10 if (!in_array($att_id, $gallery)) {
11 $gallery[] = $att_id;
12 update_post_meta($post_id, $key, $gallery);
13 }
14}
15add_action('pmxi_gallery_image', 'my_gallery_ids', 10, 4);

Vaihtoehto 2: URL-taulukko. Jos teema tarvitsee suorat linkit täysikokoisiin kuviin:

1function my_gallery_urls($post_id, $att_id, $filepath, $is_keep_existing_images)
2{
3 $key = '_my_gallery';
4 $size = 'full';
5 $gallery = get_post_meta($post_id, $key, true);
6
7 if (empty($gallery)) {
8 $gallery = array();
9 }
10
11 if (!isset($gallery[$att_id])) {
12 $src = wp_get_attachment_image_src($att_id, $size);
13 $gallery[$att_id] = $src[0];
14 update_post_meta($post_id, $key, $gallery);
15 }
16}
17add_action('pmxi_gallery_image', 'my_gallery_urls', 10, 4);

Vaihtoehto 3: erottimella varustettu merkkijono. Jos metakenttä tallentaa ID:t pilkulla erotettuna (muoto "23,25,31"):

1function my_gallery_string($post_id, $att_id, $filepath, $is_keep_existing_images)
2{
3 $key = '_my_gallery';
4 $sep = ',';
5 $gallery = get_post_meta($post_id, $key, true);
6
7 if (is_string($gallery) || empty($gallery) || $gallery == false) {
8 $gallery = explode($sep, $gallery);
9 if (!in_array($att_id, $gallery)) {
10 if ($gallery[0] == '') unset($gallery[0]);
11 $gallery[] = $att_id;
12 update_post_meta($post_id, $key, implode($sep, $gallery));
13 }
14 }
15}
16add_action('pmxi_gallery_image', 'my_gallery_string', 10, 4);

Koodi lisätään teeman functions.php-tiedostoon. Kun tuonti on valmis, koukun voi poistaa, metakenttä on jo täytetty. Tämän menetelmän etu: galleria on valmis heti tuonnin jälkeen, ilman ylimääräisiä läpikäyntejä.

Mitä tehdä jo tuoduille julkaisuille

Jos julkaisut on jo ladattu ja kuvat roikkuvat sisällössä tavallisina <img>-tageina, tarvitset erilaisen lähestymistavan. Käy läpi kaikki julkaisut ja korvaa tagit gallerian shortcodella.

Alla oleva funktio kerää kaikki julkaisun liitetiedostojen ID:t ja korvaa sisällössä olevat <img>-tagit muodolla [gallery ids="..."]:

1function replace_post_images_with_gallery($post_id)
2{
3 $post = get_post($post_id);
4 if (!$post) return;
5
6 $attachments = get_attached_media('image', $post_id);
7
8 if (empty($attachments)) return;
9
10 $ids = array();
11 foreach ($attachments as $att) {
12 $ids[] = $att->ID;
13 }
14
15 $gallery_shortcode = '[gallery ids="' . implode(',', $ids) . '"]';
16 $content = preg_replace('/<img[^>]+>/i', '', $post->post_content);
17 $content = $gallery_shortcode . "\n\n" . $content;
18
19 wp_update_post(array(
20 'ID' => $post_id,
21 'post_content' => $content,
22 ));
23}

Suorita sitten massapäivitys:

  • Siirry hallintapaneelissa kaikkien julkaisujen listaan.
  • Aseta näyttöasetuksissa kohteiden määräksi 50 (optimaalinen, jotta palvelin ei kaadu).
  • Valitse kaikki julkaisut, valitse massatoiminnoista "Päivitä" ja suorita.

WordPress käy läpi jokaisen julkaisun ja kutsuu save_post- ja siihen liittyviä koukkuja. Jos functions.php-tiedostossa oleva funktio on sidottu save_post-koukkuun, se suoritetaan. Kun valmista, poista koodi functions.php-tiedostosta, muuten jokaisen julkaisun tallennuksen yhteydessä sisältö rakennetaan uudelleen.

⁉️🤔 Usein kysytyt kysymykset

WP All Import** ei lataa kuvia tuonnin aikana, mikä on vialla?**

Tuontitiedoston linkkien on oltava täysiä URL-osoitteita (alkaen http:// tai https://) ja johdettava suoraan kuvatiedostoon, ei HTML-sivulle. Tarkista wp-content/uploads-kansion kirjoitusoikeudet: jos palvelin ei voi tallentaa tiedostoa, kuvien tuonti ohitetaan hiljaisesti. Yleisin syy on epäsuhta sisällön tekstiosan linkkien ja tuontipohjan Images-kentän linkkien välillä. Jos sisällössä on http://oldsite.com/img.jpg, ja Images-kenttään syötetään http://newsite.com/files/img.jpg, lisäosa ei yhdistä niitä ja kuva jää rikkinäiseksi. URL-osoitteiden on vastattava yksi yhteen.

Miksi pmxi_gallery_image on parempi kuin tuonnin jälkeinen käsittely?

Koukku laukeaa jokaiselle kuvalle lataushetkellä, galleria on valmis heti tuonnin jälkeen, ilman toista läpikäyntiä. Tuonnin jälkeinen käsittely wp_update_post-funktiolla kuormittaa palvelinta: tuhat julkaisua tuottaa tuhat save_post-kutsua. Alle 100 julkaisun määrillä ero on merkityksetön, mutta suurissa migraatioissa koukku säästää tunteja. Lisäksi pmxi_gallery_image antaa pääsyn ladatun tiedoston polkuun ja liitetiedoston ID:hen, voit heti määrittää minkä tahansa logiikan: jakaa kansioihin, lisätä slideriin, synkronoida CDN:n kanssa. Tuonnin jälkeinen käsittely ei tarjoa tällaista joustavuutta.

Onko koodi pakko poistaa functions.php-tiedostosta tuonnin jälkeen?

Kyllä. Jos funktio on kiinni pmxi_gallery_image-koukussa, se laukeaa JOKAISELLE liitetiedoston lisäykselle, lopputuloksena: duplikaatteja gallerian metakentässä, kun kuvia ladataan manuaalisesti. Koukku suoritetaan kerran, tuonnin valmistuttua sen voi turvallisesti poistaa. Jos funktio on sidottu save_post-koukkuun tai sitä käytetään massapäivityksessä, poista se vieläkin ehdottomammin. Muuten jokainen julkaisun muokkaus rakentaa sisällön uudelleen, poistaen <img>-tagit ja kirjoittaen gallerian uusiksi.

Miten yksittäisiä kuvia jätetään gallerian ulkopuolelle?

Jätä ne korvaamatta. pmxi_gallery_image-vaihtoehdossa lisää ehto koon tai alt-tekstin perusteella. Tuonnin jälkeisessä vaihtoehdossa käytä kaikkien <img>-tagien preg_replace-korvauksen sijaan valikoivaa korvausta: jätä kuvat, joilla on tietty CSS-luokka tai attribuutti, poista loput ja korvaa gallerialla. Esimerkiksi <img class="keep"> jää sisältöön, kaikki muut <img>-tagit korvataan [gallery]-shortcodella. Ratkaistaan hiomalla korvausfunktion säännöllistä lauseketta.

Tarvitaanko WP All Import Pro vai riittääkö ilmainen versio?

Ilmainen versio osaa tuoda kuvia mediakirjastoon ja liittää ne julkaisuun. pmxi_gallery_image-koukku on siinäkin käytettävissä. Pro-versio lisää: kuvien lataamisen ulkoisista URL-osoitteista, ajastetut Cron-tuonnit, PHP-funktioiden suorittamisen suoraan tuontipohjassa ja mukautettujen kenttien tuen. Kertaluontoiseen tuontiin paikallisilla tiedostoilla ilmainen versio on enemmän kuin riittävä. Pro tarvitaan, kun kuvat ovat kolmannen osapuolen palvelimella etkä halua ladata niitä manuaalisesti, sekä ACF-kenttiä, WooCommerce-tuontia ja mukautettujen sisältötyyppien kanssa työskentelyä varten.

Mikä menetelmä valita omaan tehtävääsi

Jos olet vasta suunnittelemassa tuontia, kokoa galleria lennossa pmxi_gallery_image-koukun avulla. Nopeampaa, siistimpää ja ilman kaksinkertaista kuormitusta palvelimelle. Mikä tahansa kolmesta yllä olevasta vaihtoehdosta toimii: valinta riippuu siitä, missä muodossa teemasi tai lisäosasi odottaa gallerian.

Jos julkaisut on jo ladattu ja kuvat ovat hajallaan sisällössä, ota funktio, joka korvaa <img>-tagit [gallery]-shortcodella, ja suorita massapäivitys. Pienille määrille (alle 200 julkaisua) tämä vie pari minuuttia. Tuhansille julkaisuille on viisaampaa jakaa eriin, esimerkiksi 50 kerrallaan.

WP All Import itsessään on yksi joustavimmista WordPress-tuontityökaluista. Yli 200 000 aktiivista asennusta, ilmainen versio WordPress.orgissa kattaa useimmat migraatiotehtävät. Ja Pro-versio poistaa viimeisetkin rajoitukset ulkoisten URL-osoitteiden ja Cron-tuontien osalta. Kokeile.