Skip to content

Kõik WordPressist, veebiarendusest — ja mitte ainult

🔧 WP All Import: kuidas koguda kõik postituse pildid ühte galeriisse

🔧 WP All Import: kuidas koguda kõik postituse pildid ühte galeriisse

Importisin sada postitust WP All Import kaudu ja pildid paiskusid sisus juhuslikult laiali: mõnes kohas venitatud täislaiusele, teisal surutud teksti vastu ja kolmandas rippumas katkiste linkidena. Iga postituse käsitsi läbivaatamine on raisatud õhtu.

On viis, kuidas kõik ühte galeriisse kokku koguda. Automaatselt, ilma käsitsi sisu muutmata. Meetod töötab nii värskete importide kui ka kuu aega tagasi üles laaditud postituste puhul. Allpool on kaks lähenemist: lihtne (lennult, pmxi_gallery_image konksu abil) ja järeltöötlusena (hulgivärskendusega). Mõlemat on testitud WP All Import versiooniga 4.9+.

💡 Kiirülevaade:

  • Valmista ette CSV või XML: pildilingid täis-URL-idena, igaüks eraldi real
  • Impordimallis seadista jaotis Pildid ja määra piltidega väli
  • Lisa pmxi_gallery_image konks faili functions.php, galerii koostab end impordi ajal ise
  • Vanade postituste jaoks: funktsioon <img> asendamiseks galerii lühikoodiga ja hulgivärskendus

Kuidas pilte impordiks ette valmistada

Enne impordi käivitamist peavad pildilingid olema õiges vormingus. WP All Import laadib pilte alla ainult siis, kui URL on täielik, otsene ja viitab failile, mitte HTML-lehele.

Oletame, et vanal saidil näeb galerii välja selline:

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>

Pärast parsimist peavad impordi CSV-failis lingid olema täis-URL-id, igaüks eraldi real, ilma HTML-ümbriseta:

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

Kus http://newsite.com on selle saidi domeen, kuhu impordite. Kriitiline: kui lingid on suhtelised või viitavad vanale domeenile, ei tuvasta WP All Import faile ega lae neid meediateeki.

Postituse sisus olevad lingid peavad üks-ühele ühtima nendega, mille te pluginasse üleslaadimiseks söödate. Vastasel juhul jäävad pärast importi mõned <img> sildid vanade URL-idega alles ja neid ei kaasata galeriisse.

Impordimalli seadistamine WP All Importis

Plugina liideses minge impordimalli juurde. Peamine jaotis siin on Images (Pildid). See näeb välja nii:

WP All Import pildiseadete liides

Jaotises Images määrake väli, mis sisaldab pildilinke. Tavaliselt on see eraldi CSV-lahter (näiteks gallery_images), kus lingid on loetletud eraldajaga, vaikimisi |:

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

WP All Import parsimib stringi, laeb iga pildi alla ja lisab selle WordPressi meediateeki. Kuid pildid on praegu postituse külge kinnitatud vaid manustena. Galerii koostame eraldi.

Kontrollige kindlasti, kuidas plugin üleslaadimist käsitleb. Klõpsake Preview & Test (Eelvaade ja test), seejärel Run Test (Käivita test). Roheline linnuke piltide arvu juures tähendab, et kõik on õigesti seadistatud. Punane rist tähendab, et kontrollige URL-e: need peavad olema täielikud ja otsesed.

Enne impordi alustamist laadige pildifailid saidi juurkataloogis olevasse kausta files, kui plugin võtab pildid serverist, mitte välistelt URL-idelt.

Kuidas galerii lennult kokku panna: pmxi_gallery_image konks

Kõige puhtam viis on galerii kokkupanek otse impordi ajal. WP All Import pakub pmxi_gallery_image konksu, mis käivitub iga üleslaaditud pildi puhul. Te püüate kinni manuse ID ja salvestate selle postituse meta-väljale soovitud vormingus.

Kolm testitud varianti, valige vastavalt oma teemale või galerii pluginile.

Variant 1: manuse ID-de massiiv. Sobib enamikule teemadest, mis eeldavad galeriid manuse ID-de massiivina:

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);

Variant 2: URL-ide massiiv. Kui teema vajab otselinke täissuuruses piltidele:

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);

Variant 3: string eraldajaga. Kui meta-väli salvestab komaga eraldatud ID-sid (vormingus "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);

Kood lisatakse teema faili functions.php. Pärast impordi lõppu võib konksu eemaldada, meta-väli on juba täidetud. Selle meetodi eelis: galerii on kohe pärast importi valmis, ilma täiendavate läbimisteta.

Mida teha juba imporditud postitustega

Kui postitused on juba üles laaditud ja pildid ripuvad sisus tavaliste <img> siltidena, on vaja teistsugust lähenemist. Käige läbi kõik postitused ja asendage sildid galerii lühikoodiga.

Allolev funktsioon kogub kokku kõik postituse manuste ID-d ja asendab sisus <img> väärtusega [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}

Seejärel käivitage hulgivärskendus:

  • Administraatori paneelis minge kõigi postituste loendisse.
  • Ekraanisuvandites määrake üksuste arvuks 50 (optimaalne, et server kokku ei jookseks).
  • Valige kõik postitused, valige hulgitoimingutes „Update" (Värskenda) ja rakendage.

WordPress käib läbi iga postituse, kutsub välja save_post ja seotud konksud. Kui funktsioon failis functions.php on seotud save_post-iga, siis see käivitub. Pärast lõpetamist **eemaldage kood failist **functions.php, vastasel juhul ehitatakse iga postituse salvestamisega sisu uuesti ümber.

⁉️🤔 Korduma kippuvad küsimused

WP All Import** ei lae impordi ajal pilte alla, milles viga?**

Impordifailis olevad lingid peavad olema täis-URL-id (koos http:// või https://-iga) ja viima otse pildifailile, mitte HTML-lehele. Kontrollige wp-content/uploads kirjutusõigusi: kui server ei saa faili salvestada, jäetakse pildi import vaikselt vahele. Kõige levinum põhjus on mittevastavus sisukehas olevate linkide ja malli Images-välja vahel. Kui sisus on http://oldsite.com/img.jpg ja Images-väljale söödetakse http://newsite.com/files/img.jpg, siis plugin ei seo neid ja pilt jääb katkiseks. URL-id peavad üks-ühele ühtima.

Miks on pmxi_gallery_image parem kui impordijärgne töötlus?

Konks käivitub iga pildi puhul üleslaadimise hetkel, galerii on valmis kohe pärast importi, ilma teise läbimiseta. Impordijärgne töötlus wp_update_post kaudu koormab serverit: tuhat postitust annab tuhat save_post väljakutset. Kuni 100 postitusega mahtude puhul on erinevus tühine, kuid suurte migratsioonide puhul säästab konks tunde. Lisaks annab pmxi_gallery_image juurdepääsu üleslaaditud faili teekonnale ja manuse ID-le, saate kohe ette kirjutada mis tahes loogika: jaotada kaustadesse, lisada sliderisse, sünkroonida CDN-iga. Impordijärgne töötlus sellist paindlikkust ei paku.

Kas kood tuleb pärast importi failist functions.php eemaldada?

Jah. Kui funktsioon ripub pmxi_gallery_image küljes, käivitub see IGASUGUSE manuse lisamise korral, tulemus: duplikaadid galerii meta-väljal piltide käsitsi üleslaadimisel. Konks käivitub ühe korra, pärast impordi lõppu võib selle julgelt eemaldada. Kui funktsioon on seotud save_post-iga või seda kasutatakse hulgivärskenduses, siis seda enam eemaldage see. Vastasel juhul ehitab iga postituse muutmine sisu ümber, eemaldades <img> sildid ja kirjutades galerii üle.

Kuidas jätta üksikud pildid galeriist välja?

Välistage need asendamisest. Variandis pmxi_gallery_image lisage tingimus suuruse või alt-teksti järgi. Impordijärgse töötluse variandis kasutage kõigi <img> jaoks preg_replace asemel valikulist asendamist: jätke alles kindla CSS-klassi või atribuudiga pildid, eemaldage ülejäänud ja asendage galeriiga. Näiteks <img class="keep"> jääb sisusse, kõik muud <img> asendatakse [gallery]-ga. Lahendatav regulaaravaldise täpsustamisega asendusfunktsioonis.

Kas WP All Import Pro on vajalik või piisab tasuta versioonist?

Tasuta versioon suudab importida pilte meediateeki ja manustada need postitusele. Ka pmxi_gallery_image konks on selles saadaval. Pro versioon lisab: piltide laadimine välistelt URL-idelt, Cron-importimine ajakava alusel, PHP-funktsioonide otse käivitamine impordimallis ja tugi kohandatud väljadele. Ühekordseks impordiks kohalike failidega on tasuta versioonist enam kui küll. Pro on vajalik, kui pildid on kolmanda osapoole serveris ja te ei soovi neid käsitsi alla laadida, samuti ACF-väljade, WooCommerce'i impordi ja kohandatud postitüüpidega töötamiseks.

Milline meetod oma ülesande jaoks valida

Kui alles planeerite importi, pange galerii kokku lennult pmxi_gallery_image abil. Kiirem, puhtam ja ilma topeltkoormuseta serverile. Ükskõik milline kolmest ülaltoodud variandist töötab: valik sõltub sellest, millises vormingus teie teema või plugin galeriid eeldab.

Kui postitused on juba üles laaditud ja pildid on sisus laiali, võtke funktsioon <img> asendamiseks [gallery]-ga ja käivitage hulgivärskendus. Väikeste mahtude puhul (kuni 200 postitust) võtab see paar minutit. Tuhandete postituste puhul on mõistlikum jagada 50-kaupa partiideks.

WP All Import ise on üks paindlikumaid importijaid WordPressi jaoks. 200 000+ aktiivset paigaldust, tasuta versioon WordPress.org-is katab enamiku migratsiooniülesandeid. Ja Pro versioon eemaldab viimased piirangud väliste URL-ide ja Cron-importimise osas. Proovige järele.