Cum să utilizezi do_shortcode cu variabile în WordPress?

7 oct. 2012, 22:38:17
Vizualizări: 14.4K
Voturi: 1

Am dificultăți în a obține formatul corect pentru PHP în acest embed cu do_shortcode folosind variabile din pluginul Advanced Custom Fields. Cred că am încercat fiecare variație posibilă cu ., ', și ". După ce am citit toate resursele posibile, tot nu sunt mai aproape de soluție.

<?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"]'); 
?>

Când folosesc doar o singură variabilă, așa cum se vede mai jos echo do_shortcode('[pw_map address="'. $postalcode . '" width="100%" height="200px"]');, funcționează perfect.

2
Comentarii

Te rog să adaugi funcția de callback pentru acest shortcode în întrebarea ta. Va fi mult mai ușor să oferim un răspuns util. A, și bun venit la WordPress Stack Exchange!

fuxia fuxia
7 oct. 2012 22:59:11

Mulțumesc mult pentru primire și pentru ajutor. Aceasta este o resursă extraordinară - sunt uimit. Shortcode-ul este generat de un plugin numit simple google maps short code http://wordpress.org/extend/plugins/simple-google-maps-short-code/.

Jim Kite Jim Kite
7 oct. 2012 23:04:05
Toate răspunsurile la întrebare 1
9

Sintaxa ta este incorectă, ghilimelele nu se potrivesc. Încearcă să separi datele de șablonul shortcode-ului și folosește 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 );

Așa este mult mai ușor de citit și mai greu să creezi erori de sintaxă. :)

7 oct. 2012 22:45:09
Comentarii

Se pare că nu returnează nimic (cred că pentru că nu are valori pentru niciuna dintre acele variabile). Am editat astfel: `<?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 );

?>` dar nici asta nu a funcționat.

Jim Kite Jim Kite
7 oct. 2012 22:51:39

Hopa. Cum se formatează blocurile de cod în comentarii?

Jim Kite Jim Kite
7 oct. 2012 22:52:54

Nu se poate pur și simplu scrie cod în Comentarii

Tom J Nowell Tom J Nowell
7 oct. 2012 22:54:16

@JimKite Caracterul % din 100% ar fi putut provoca confuzie în sprintf(). Încearcă acum codul modificat.

fuxia fuxia
7 oct. 2012 23:05:44

Modificarea semnului procentual nu pare să fi făcut vreo diferență, din câte văd. Încă nu returnează nimic pe pagină. Am procedat corect declarând variabilele înainte de acest cod?

Jim Kite Jim Kite
7 oct. 2012 23:50:41

Poate că valorile câmpurilor sunt goale sau nu există date valide de adresă? Afișează-le pentru a verifica.

fuxia fuxia
7 oct. 2012 23:53:05

Făcând print_r ($address); chiar înainte de echo do_shortcode a afișat adresa.

Jim Kite Jim Kite
8 oct. 2012 00:25:33

A fost prostia mea. Codul tău a funcționat perfect. Nu am verificat dacă codul postal introdus în postarea de testare era corect și probabil a produs un conflict cu adresa, astfel încât nu a returnat deloc o hartă. Mulțumesc mult pentru ajutor și îmi cer scuze pentru greșeală.

Jim Kite Jim Kite
8 oct. 2012 16:27:37

Mă bucur că ai rezolvat. :) Dă click pe bifa (✔) din partea stângă, astfel încât alți cititori să știe că asta rezolvă problema.

fuxia fuxia
8 oct. 2012 16:31:31
Arată celelalte 4 comentarii