Obtener ID de publicación en variable en Grid Builder Visual Composer

2 minutos de lectura

avatar de usuario
giovanni ricciardi

Estoy tratando de obtener algunos campos personalizados dentro de mi generador de cuadrícula personalizado. He agregado alguna taxonomía adicional y me gustaría agregar datos personalizados para mostrar. He leído tu artículo aquí: https://kb.wpbakery.com/docs/developers-how-tos/adding-custom-shortcode-to-grid-builder/ y al implementarlo, tengo un problema al intentar obtener la identificación de la publicación actual. Sé que el código es el siguiente:

add_shortcode( 'vc_post_id', 'vc_post_id_render' );
function vc_post_id_render() {
   return '<h2>{{ post_data:ID }}</h2>'; // usage of template variable post_data with argument "ID" 
}

El caso es que los {{ post_data:ID }} no se pueden guardar en una variable para luego obtener la publicación y jugar con ella como tal:

$post_id = '{{ post_data:ID }}';
$post = get_post($post_id);

como fallará. ¿Podría decirme cómo obtener la ID de la publicación actual como una variable para poder mostrar datos personalizados en la cuadrícula?

Muchísimas gracias.

  • Estoy teniendo el mismo problema. ¿¡Lo has descubierto!?

    –Tiffany Israel

    1 de junio de 2017 a las 16:38

  • Parece que devuelve un valor de cadena. Estoy tratando de resolver esto. actualizaré si encuentro algo

    – amilaishere

    7 de junio de 2017 a las 10:59

  • ¿Alguna vez descubriste cómo hacer esto? Tengo el mismo problema en este momento y no puedo encontrar ninguna información clara en ningún lado.

    –Alfie Robles

    9 jun 2018 a las 22:55

Ok, aquí lo que estoy pensando. En mi escenario, tengo un campo personalizado llamado precio. Entonces pude mostrar el precio usando

{{ post_data:price }}

Este. Pero cuando estaba tratando de asignarlo a una variable, falló. Cuando var_dump la variable me da (21) caracteres para cada vez. Así que pensé que debía haber personajes invisibles. asique

echo bin2hex($price)

El resultado fue 7b7b20706f73745f646174613a7072696365207d7d

Y después de la conversión de ASCII a texto, se convirtió en esto

{{ post_data:price }}

Entonces me di cuenta. Oh tonto de mí. Estas son etiquetas de plantilla. Como en smarty o angular. Inyectaron valores una vez que la página se ha cargado. Entonces, PHP no tiene la oportunidad de obtener valor porque todo sucede en el lado del cliente.

  • ¡Has explicado muy bien el problema! pero no dio ninguna solución alternativa.

    – Rakesh

    26 de agosto de 2019 a las 11:54

necesita crear vc_gitem_template_attribute_YOUR_ATTRIBUTE y allí puede tomar la identificación. como esto:

add_filter( 'vc_gitem_template_attribute_producer_logo', 'vc_gitem_template_attribute_producer_logo', 10, 2 );
function vc_gitem_template_attribute_producer_logo( $value, $data ) {

  extract( array_merge( array(
   'post' => null,
   'data' => '',
  ), $data ) );

  $termini = get_the_terms( $post->ID, 'producer' );
  $logo = get_field('prlogo', $termini[0]);
  $image="<img class="img-prod" src="" . $logo . '">';

  return $image;
} 

y renderizar

add_shortcode( 'producer_logo', 'vc_producer_logo_render' );
function vc_producer_logo_render($atts, $content, $tag) {
    return '{{producer_logo}}';
}

¿Ha sido útil esta solución?