Получить идентификатор сообщения в переменной в визуальном компоновщике Grid Builder

Я пытаюсь получить некоторые настраиваемые поля в моем собственном построителе сетки. Я добавил дополнительную таксономию и хотел бы добавить пользовательские данные для отображения. Я прочитал вашу статью здесь: https://kb.wpbakery.com/docs/developers-how-tos/adding-custom-shortcode-to-grid-builder/ и при его реализации у меня возникает проблема при попытке получить идентификатор текущего поста. Я знаю, что код выглядит следующим образом:

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

так как это не удастся. Не могли бы вы рассказать мне, как получить текущий идентификатор сообщения в качестве переменной, чтобы я мог отображать пользовательские данные в сетке?

Большое спасибо.


person Giovanni Ricciardi    schedule 10.04.2017    source источник
comment
У меня проблема с Сэмом. Ты разобрался!?   -  person Tiffany Israel    schedule 01.06.2017
comment
Кажется, он возвращает строковое значение. Я пытаюсь решить это. обновлю если что найду   -  person amilaishere    schedule 07.06.2017
comment
Вы когда-нибудь понимали, как это сделать? У меня такая же проблема сейчас, и я не могу найти никакой четкой информации.   -  person Alfie Robles    schedule 10.06.2018


Ответы (2)


Хорошо, вот что я думаю. В моем сценарии у меня есть настраиваемое поле с именем цена. Поэтому я смог показать цену, используя

{{ post_data:price }}

Этот. Но когда я пытался присвоить его переменной, это не удалось. Когда я var_dump переменной, она дает мне (21) символ каждый раз. Поэтому я подумал, что должны быть невидимые символы. так что я

echo bin2hex($price)

Результат был 7b7b20706f73745f646174613a7072696365207d7d

А после преобразования ASCII в текст стало так

{{ post_data:price }}

Потом я понял это. О, глупый я. Это теги шаблона. Например, в smarty или angular. Они вводили значения после загрузки страницы. Таким образом, у PHP нет шансов получить ценность, потому что все происходит на стороне клиента.

person amilaishere    schedule 07.06.2017
comment
Вы очень хорошо объяснили проблему! но не дал никакого альтернативного решения. - person Rakesh; 26.08.2019

нужно создать 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}}';
}
person Виталий Капранов    schedule 14.02.2019