在Grid Builder Visual Composer中获取变量中的帖子ID

时间:2017-04-10 09:03:27

标签: php wordpress grid visual-composer

我正在尝试在自定义网格构建器中获取一些自定义字段。我添加了一些额外的分类法,并希望添加自定义数据来显示。我在这里阅读了你的文章:https://kb.wpbakery.com/docs/developers-how-tos/adding-custom-shortcode-to-grid-builder/并且在实现它时,我在尝试获取当前帖子ID的ID时遇到了问题。我知道代码如下:

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" 
}

问题是{{post_data:ID}}无法保存到变量中,以便以后获取帖子并使用它:

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

因为它会失败。您能否告诉我如何将当前的帖子ID作为变量,以便我可以在网格上显示自定义数据?

非常感谢。

2 个答案:

答案 0 :(得分:3)

好的,这就是我的想法。在我的场景中,我有一个名为price的自定义字段。 所以我能够通过使用

来显示价格
{{ post_data:price }}

此。但是当我试图将它分配给变量时,它失败了。当我var_dump变量时,它每次给我(21)个字符。所以我认为必须有隐形人物。所以我

echo bin2hex($price)

结果是7b7b20706f73745f646174613a7072696365207d7d

在ASCII到文本转换之后,它变成了这个

{{ post_data:price }}

然后我意识到了。哦,傻我。这些是模板标签。喜欢聪明或棱角分明。一旦页面加载,它们就会注入值。所以PHP没有机会获得价值,因为客户端发生了一切。

答案 1 :(得分:0)

您需要创建vc_gitem_template_attribute_YOUR_ATTRIBUTE,然后可以在其中获取ID。像这样:

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;
} 

并渲染

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