Utilizzo di do_shortcode con variabili in WordPress

7 ott 2012, 22:38:17
Visualizzazioni: 14.4K
Voti: 1

Sto avendo difficoltà a ottenere il formato corretto per il PHP in questo embed do_shortcode utilizzando variabili dal plugin Advanced Custom Fields. Penso di aver provato ogni variazione possibile con ., ', e ". Dopo aver letto ogni risorsa disponibile, non sono ancora riuscito a risolvere.

<?php 
    $address = get_field('cong_streetaddress');
    $city = get_field('cong_city');
    $province = get_field('cong_province');
    $postalcode = get_field('cong_postalcode');

    echo do_shortcode('[pw_map address="'" . $address . " . " . $city . " . " . $province . " . " . $postalcode . "'" width="100%" height="200px"]'); 
?>

Facendolo con una sola variabile, come in echo do_shortcode('[pw_map address="'. $postalcode . '" width="100%" height="200px"]'); funziona perfettamente.

2
Commenti

Per favore aggiungi la funzione di callback per questo shortcode alla tua domanda. Sarà molto più facile così fornire una risposta utile. Ah, e benvenuto su WordPress Stack Exchange!

fuxia fuxia
7 ott 2012 22:59:11

Grazie mille per il benvenuto e per il tuo aiuto. Questa è davvero una risorsa eccezionale - sono impressionato. Lo shortcode è generato da un plugin chiamato simple google maps short code http://wordpress.org/extend/plugins/simple-google-maps-short-code/.

Jim Kite Jim Kite
7 ott 2012 23:04:05
Tutte le risposte alla domanda 1
9

La tua sintassi è rotta, i segni di virgoletta non corrispondono. Prova a separare i dati dal template dello shortcode e utilizza sprintf():

$shortcode = sprintf(
    '[pw_map address="%1$s %2$s %3$s %4$s" width="%5$s" height="200px"]',
    $address,
    $city,
    $province,
    $postalcode,
    '100%'
);
echo do_shortcode( $shortcode );

È molto più semplice da leggere ed è più difficile creare errori di sintassi. :)

7 ott 2012 22:45:09
Commenti

Non sembra restituire nulla (penso perché non abbia valori per nessuna di quelle variabili). Ho modificato così: `<?php

$address = get_field('cong_streetaddress');
$city = get_field('cong_city');
$province = get_field('cong_province');
$postalcode = get_field('cong_postalcode');

$shortcode = sprintf(
    '[pw_map address="%1$s %2$s %3$s %4$s" width="100%" height="200px"]',
    $address,
    $city,
    $province,
    $postalcode
);
echo do_shortcode( $shortcode );

?>` ma non ha funzionato neanche così.

Jim Kite Jim Kite
7 ott 2012 22:51:39

Oops. Come si formattano i blocchi di codice nei commenti?

Jim Kite Jim Kite
7 ott 2012 22:52:54

Non si può semplicemente inserire codice nei Commenti

Tom J Nowell Tom J Nowell
7 ott 2012 22:54:16

@JimKite Il % in 100% potrebbe aver confuso sprintf(). Prova ora con il codice modificato.

fuxia fuxia
7 ott 2012 23:05:44

La modifica del segno di percentuale non sembra aver fatto alcuna differenza, per quanto posso vedere. Non restituisce ancora nulla alla pagina. Era corretto dichiarare le variabili prima di questo codice?

Jim Kite Jim Kite
7 ott 2012 23:50:41

Forse i valori dei campi sono vuoti o non ci sono dati di indirizzo validi? Stampali per verificarlo.

fuxia fuxia
7 ott 2012 23:53:05

Facendo print_r ($address); subito prima del echo do_shortcode mostrava l'indirizzo.

Jim Kite Jim Kite
8 ott 2012 00:25:33

È stata una mia stupidaggine. Il tuo codice funzionava perfettamente. Non avevo verificato che il codice postale inserito nel post di test fosse corretto, e deve aver creato un conflitto con l'indirizzo, quindi non restituiva affatto una mappa. Grazie mille per l'aiuto e scusa per l'errore.

Jim Kite Jim Kite
8 ott 2012 16:27:37

Mi fa piacere che tu abbia risolto. :) Clicca il segno di spunta (✔) sul lato sinistro, così gli altri lettori sapranno che questa è la soluzione al problema.

fuxia fuxia
8 ott 2012 16:31:31
Mostra i restanti 4 commenti