Poate Un Shortcode Să Preia HTML/Text Din Conținut Și Să Îl Returneze De Două Ori Cu HTML Adăugat?

21 mai 2016, 03:44:05
Vizualizări: 1.34K
Voturi: 2

Încerc să reduc din munca mea și speram că cineva ar putea ști dacă acest lucru este posibil.

Acestea sunt imagini aranjate într-un slider care afișează un text suprapus pe imaginea din slide-ul următor într-un articol multipagină.

Iată ce încerc să fac. Să iau acest conținut:

<h2>Titlul imaginii</h2>
[caption]<img src="http">[/caption]
text pentru slide

Și să le afișez astfel:

<div class="singe_slide">
<h2>Titlul imaginii</h2>
[caption]<img src="http">[/caption]
</div>
<!--nextpage-->
<div class="singe_slide">
<h2>Titlul imaginii</h2>  //Aceeași imagine pe pagina următoare
[caption]<img src="http">[/caption]
<div class="slide_caption"><div class="captExt">
text pentru slide
</div></div>
<!--nextpage-->

Acesta este codul pe care îl folosesc în prezent pentru shortcode-urile mele, dar durează la fel de mult ca și cum aș adăuga manual div-urile, și este foarte dezordonat. Arată astfel:

[Slide]<h2>Titlul imaginii</h2>
[caption]<img src="http">[/caption][/Slide]
<!--nextpage-->
[Slide]<h2>Titlul imaginii</h2> //Aceeași imagine pe pagina următoare
[caption]<img src="http">[/caption]
[SlideCap]text pentru slide[/SlideCap][/Slide]
<!--nextpage-->

Și acestea sunt cele două shortcode-uri ale mele:

function Slide($atts, $content = null) {
    $content = wpautop(trim($content));
    return '<div class="singe_slide">' . do_shortcode($content) . '</div>';
}
add_shortcode('Slide', 'Slide');

function SlideCap($atts, $content = null) {
    $content = wpautop(trim($content));
   return '<div class="slide_caption"><div class="captExt">' . do_shortcode($content) . '</div></div>';
}
add_shortcode('SlideCap', 'SlideCap');

Sunt deschis la sugestii pentru o metodă mai ușoară de a face acest lucru. Acesta este primul meu shortcode, așa că sunt nou în acest domeniu.

Este posibil să obții ceva între shortcode-uri ca variabilă? [shortcode]Această Parte Aici[/shortcode]

8
Comentarii

Nu cred că înțeleg complet. Al doilea argument din handler-ul tău de shortcode - $content - va primi conținutul care se află între shortcode-urile tale. Asta încerci să spui? Nu sunt sigur de ce rulezi asta prin do_shortcode() din nou...

Tim Malone Tim Malone
21 mai 2016 04:47:14

@TimMalone Am adăugat mai multe informații în postare care ar putea ajuta. În primul rând, nu sunt programator PHP, așa că multe din acestea sunt doar încercări și erori. L-am rulat de două ori pentru că am un shortcode în interiorul altui shortcode și nu știu cum altfel să fac asta. Am adăugat cum scriu shortcode-ul meu în prezent când fac o postare în WP. Încerc să returnez titlul și imaginea de două ori cu un nextpage între ele, iar textul o singură dată pe a doua pagină, toate înfășurate în div-uri.

DRK DRK
21 mai 2016 15:00:55

Ceea ce nu este clar în întrebarea ta este ce rezultat HTML încerci să obții. Ai împărtășit mult cod, dar nu ai spus "Am acest shortcode X și vreau să producă acest HTML Y. Acest cod Z este ceea ce încerc să folosesc pentru a-l crea, dar în schimb produce W. De ce se întâmplă asta?"

ToniWidmo ToniWidmo
21 mai 2016 16:03:39

@AntonChanning Rămâi cu mine, nu sunt programator. Am pus ceea ce încerc să realizez și ceea ce fac în prezent pentru a obține acest lucru. Problema este că este foarte obositor să adaugi toate shortcode-urile și titlurile/imaginile de două ori. Este la fel de consumator de timp ca și cum aș introduce html-ul manual în loc de shortcode-uri. Ceea ce vreau să fac este să fac ca shortcode-ul meu să ia $content și să-l afișeze așa cum doresc. În esență, combinând shortcode-urile mele într-unul singur. Pur și simplu nu știu cum să obțin fiecare element de care am nevoie între shortcode-uri și să-l afișez așa cum doresc. Trebuie să-l împart mai întâi într-un array?

DRK DRK
21 mai 2016 16:42:11

Am un programator care lucrează la asta acum. Dacă reușește, voi posta ce a făcut.

DRK DRK
21 mai 2016 17:37:15

Deci, încerci să folosești un shortcode pentru a crea o imagine cu o legendă?

ToniWidmo ToniWidmo
21 mai 2016 17:43:42

Cauți de fapt ceva mai mult de genul [slide=http://image.url]<h2>Titlul imaginii</h2>[slidecap]Acesta este subtitlul.[/slidecap][/slide]?

ToniWidmo ToniWidmo
21 mai 2016 18:09:47

@AntonChanning Îmi pare rău dacă te confund cu asta. Subtitlul este din WordPress și nu trebuie confundat cu shortcode-ul SlideCap. Subtitlul este inserat automat când îl adaug în câmpul de subtitlu pentru imagine unde introduc creditul pentru imagine. SlideCap este o suprapunere opacă pe imagine cu text care descrie imaginea. Dacă folosesc [slide=http://image.url] asta ar crea și mai mulți pași. Încerc să iau titlul h2, imaginea cu sau fără subtitlu, și textul postării și să postez titlul h2 și imaginea pe o pagină, apoi titlul h2, imaginea și textul postării pe pagina următoare.

DRK DRK
21 mai 2016 18:17:26
Arată celelalte 3 comentarii
Toate răspunsurile la întrebare 1
1

Bine, cred că am înțeles ce întrebi de fapt. Întrebi care este variabila pentru partea dintre shortcode-uri. Dacă doar asta întrebi, atunci răspunsul este variabila parametru $content. O procesezi deja în codul tău.

De asemenea, în exemplul tău, se pare că ai un al treilea shortcode, [caption], pe care nu îl procesezi. Este intenționat? Nu pare că vrei să obții HTML final cu acesta inclus, așa că această soluție presupune că nu vrei asta.

Voi presupune că ceea ce dorești este un format simplu de shortcode, cum ar fi:

[slide=ImageTitle][slideimg]http://some.domain/slide.jpg[/slideimg][slidecap]This is the caption.[/slidecap][/slide]

Pe care apoi îl poți procesa simplu ajustând funcțiile tale astfel:

function shortcode_slide($atts, $content = null) {
    if(empty($atts)) {
        $img_title='';
    } else {
        // [slide=Titlu]...[/slide]
        // [slide="Titlu cu mai multe cuvinte"]...[/slide]
        $atts = $this->attributefix( $atts );
        $img_title = '<h2>'.trim(array_shift($atts),'="').'</h2>'; // Elimină ghilimele și egalul.
    }

    $content = wpautop(trim($content));
    return '<div class="singe_slide">'.$img_title. do_shortcode($content) . '</div>';
}
add_shortcode('slide', 'shortcode_slide');

function shortcode_slidecap($atts, $content = null) {
    $content = wpautop(trim($content));
    return '<div class="slide_caption"><div class="captExt">' . do_shortcode($content) . '</div></div>';
}
add_shortcode('slidecap', 'shortcode_slidecap');

function shortcode_slideimg($atts, $content = null) {
    $content = wpautop(trim($content));
    return '<img src="'.$content.'" />';
}
add_shortcode('slideimg', 'shortcode_slideimg');

Aceasta ar trebui să producă HTML funcțional.

21 mai 2016 18:26:00
Comentarii

Minunat, mulțumesc. O să încerc mâine să văd dacă funcționează.

DRK DRK
22 mai 2016 04:34:52