Un shortcode può ottenere HTML/Testo dal contenuto e restituirlo due volte con HTML aggiuntivo?

21 mag 2016, 03:44:05
Visualizzazioni: 1.34K
Voti: 2

Sto cercando di ridurre il mio carico di lavoro e speravo che qualcuno potesse dirmi se questo è possibile.

Si tratta di immagini configurate in uno slider che mostra una sovrapposizione di testo sull'immagine nella slide successiva in un post multipagina.

Ecco cosa sto cercando di fare. Prendere questo:

<h2>Titolo Immagine</h2>
[caption]<img src="http">[/caption]
testo per la slide

E restituirlo in questo modo:

<div class="singe_slide">
<h2>Titolo Immagine</h2>
[caption]<img src="http">[/caption]
</div>
<!--nextpage-->
<div class="singe_slide">
<h2>Titolo Immagine</h2>  //Stessa immagine pagina successiva
[caption]<img src="http">[/caption]
<div class="slide_caption"><div class="captExt">
testo per la slide
</div></div>
<!--nextpage-->

Questo è ciò che sto attualmente usando per i miei shortcode, ma richiede lo stesso tempo che aggiungere manualmente i div, ed è molto disordinato. Sembra così:

[Slide]<h2>Titolo Immagine</h2>
[caption]<img src="http">[/caption][/Slide]
<!--nextpage-->
[Slide]<h2>Titolo Immagine</h2> //Stessa immagine pagina successiva
[caption]<img src="http">[/caption]
[SlideCap]testo per la slide[/SlideCap][/Slide]
<!--nextpage-->

E questi sono i miei 2 shortcode:

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

Sono aperto a suggerimenti su un modo più semplice per fare questo. Questo è il mio primo shortcode, quindi sono nuovo.

È possibile ottenere qualcosa tra gli shortcode come variabile? [shortcode]Questa Parte Qui[/shortcode]

8
Commenti

Non credo di aver capito bene. Il secondo argomento nel tuo gestore di shortcode - $content - riceverà il contenuto che si trova tra i tuoi shortcode. È questo che intendi? Non sono sicuro del perché stai passando di nuovo questo attraverso do_shortcode()...

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

@TimMalone Ho aggiunto ulteriori informazioni al post che potrebbero aiutare. Innanzitutto non sono un programmatore php quindi molto di questo è solo prova ed errore. L'ho eseguito due volte perché ho uno shortcode all'interno di un altro shortcode e non so come altro farlo. Ho aggiunto come scrivo attualmente il mio shortcode quando creo un post in WP. Sto cercando di restituire l'intestazione e l'immagine due volte con un nextpage che li separa e il testo una volta nella seconda pagina, il tutto racchiuso in div.

DRK DRK
21 mag 2016 15:00:55

Ciò che non è chiaro nella tua domanda è quale output HTML stai cercando di ottenere. Hai condiviso molto codice, ma non hai detto "Ho questo shortcode X e voglio che produca questo HTML Y. Questo codice Z è quello che sto provando a usare per realizzarlo, ma invece sta producendo W. Perché?"

ToniWidmo ToniWidmo
21 mag 2016 16:03:39

@AntonChanning Abbi pazienza, non sono un programmatore. Ho messo quello che sto cercando di ottenere e quello che sto facendo attualmente per raggiungerlo. Il problema è che è molto tedioso aggiungere tutti gli shortcode e i titoli/immagini due volte. È altrettanto dispendioso in termini di tempo quanto inserire l'html manualmente invece di usare gli shortcode. Quello che voglio fare è creare uno shortcode che prenda il $content e lo restituisca nel modo che desidero. In pratica, combinando i miei shortcode in uno solo. Semplicemente non so come ottenere ogni elemento di cui ho bisogno tra gli shortcode e restituirlo come voglio. Devo prima dividerlo in un array?

DRK DRK
21 mag 2016 16:42:11

Ho un programmatore che ci sta lavorando ora. Se ci riesce, posterò quello che ha fatto.

DRK DRK
21 mag 2016 17:37:15

Quindi, stai cercando di usare uno shortcode per creare un'immagine con una didascalia?

ToniWidmo ToniWidmo
21 mag 2016 17:43:42

Stai cercando qualcosa di più simile a [slide=http://image.url]<h2>Titolo immagine</h2>[slidecap]Questa è la didascalia.[/slidecap][/slide]?

ToniWidmo ToniWidmo
21 mag 2016 18:09:47

@AntonChanwing Scusa se ti sto confondendo. La didascalia proviene da WordPress e non va confusa con lo shortcode SlideCap. La didascalia viene inserita automaticamente quando la aggiungo nel campo apposito per l'immagine dove inserisco i crediti. Lo SlideCap è una sovrapposizione opaca sull'immagine con testo descrittivo. Se usassi [slide=http://image.url] creerei ancora più passaggi. Sto cercando di prendere il titolo h2, l'immagine con o senza didascalia, e il testo del post e ripubblicare il titolo h2 e l'immagine su una pagina, poi il titolo h2, l'immagine e il testo del post sulla pagina successiva.

DRK DRK
21 mag 2016 18:17:26
Mostra i restanti 3 commenti
Tutte le risposte alla domanda 1
1

Ok, penso di aver capito cosa stai effettivamente chiedendo. Stai chiedendo qual è la variabile per la parte tra gli shortcode. Se questa è l'unica cosa che stai chiedendo, allora la risposta è la variabile parametro $content. Stai già elaborandola nel tuo codice.

Inoltre, nel tuo esempio, sembra che tu abbia un terzo shortcode, [caption], che non stai elaborando. È voluto? Non sembra che tu voglia produrre HTML finale con quello dentro, quindi questa soluzione presume che tu non lo voglia.

Presumo che quello che desideri sia un formato di shortcode semplice da usare come:

[slide=TitoloImmagine][slideimg]http://some.domain/slide.jpg[/slideimg][slidecap]Questa è la didascalia.[/slidecap][/slide]

Che puoi poi elaborare semplicemente modificando le tue funzioni in questo modo:

function shortcode_slide($atts, $content = null) {
    if(empty($atts)) {
        $img_title='';
    } else {
        // [slide=Titolo]...[/slide]
        // [slide="Titolo con più parole"]...[/slide]
        $atts = $this->attributefix( $atts );
        $img_title = '<h2>'.trim(array_shift($atts),'="').'</h2>'; //Rimuovi virgolette e uguali.
    }

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

Questo dovrebbe produrre HTML funzionante.

21 mag 2016 18:26:00
Commenti

Fantastico, grazie. Proverò domani e vedrò se riesco a farlo funzionare.

DRK DRK
22 mag 2016 04:34:52