Usando do_shortcode con variables en WordPress

7 oct 2012, 22:38:17
Vistas: 14.4K
Votos: 1

Luchando por obtener el formato correcto para el PHP en este embed con do_shortcode usando variables del plugin Advanced Custom Fields. Creo que he intentado todas las variaciones con ., ' y ". Después de leer todos los recursos que pude encontrar, todavía no estoy más cerca.

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

Hacerlo con una sola variable, así echo do_shortcode('[pw_map address="'. $postalcode . '" width="100%" height="200px"]'); funciona bien.

2
Comentarios

Por favor, añade la función de callback para este shortcode a tu pregunta. Será mucho más fácil entonces dar una respuesta útil. ¡Ah, y bienvenido a WordPress Stack Exchange!

fuxia fuxia
7 oct 2012 22:59:11

Muchas gracias por la bienvenida y por tu ayuda. Este es todo un recurso - estoy impresionado. El shortcode es generado por un plugin llamado 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
Todas las respuestas a la pregunta 1
9

Tu sintaxis está rota, las comillas no coinciden. Intenta separar los datos de la plantilla del shortcode y usa 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 );

Así es mucho más fácil de leer y es más difícil cometer errores de sintaxis. :)

7 oct 2012 22:45:09
Comentarios

Parece que no devuelve nada (creo porque no tiene valores para ninguna de esas variables). Lo edité así: `<?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 );

?>` pero eso tampoco funcionó.

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

Ups. ¿Cómo se formatean bloques de código en los comentarios?

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

Uno simplemente no codifica en los Comentarios

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

@JimKite El % en 100% podría haber confundido a sprintf(). Prueba el código modificado ahora.

fuxia fuxia
7 oct 2012 23:05:44

El cambio del signo de porcentaje no parece haber hecho ninguna diferencia que yo pueda ver. Todavía no devuelve nada a la página. ¿Estaba en lo correcto al declarar las variables antes de este código?

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

Quizás los valores de los campos están vacíos o no hay datos de dirección válidos? Imprímelos para verificarlo.

fuxia fuxia
7 oct 2012 23:53:05

Al hacer print_r ($address); justo antes del echo do_shortcode mostró la dirección.

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

Eso fue mi estupidez. Tu código funcionó perfectamente. No verifiqué que el código postal ingresado en la publicación de prueba fuera correcto, y debe haber estado generando un conflicto con la dirección, por lo que no devolvía ningún mapa. Muchas gracias por la ayuda y disculpas por el error.

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

Me alegra que lo hayas resuelto. :) Haz clic en la pequeña marca de verificación (✔) en el lado izquierdo, para que otros lectores sepan que eso soluciona el problema.

fuxia fuxia
8 oct 2012 16:31:31
Mostrar los 4 comentarios restantes