Intereting Posts
Использовать иерархический пользовательский тип сообщения для основного блога и субблоков? Запросить сообщения и вернуть XML Каков наиболее эффективный способ выполнения рекурсивных сложных запросов? Как я могу отобразить форму контакта для внеодных продуктов в WooCommerce? Шифровать электронные письма? создать выпадающее меню в настройке темы из пользовательского db WP_Query, не рассматривающий категорию детей Если has_term, загрузите другую тему Как создать разбивку на страницы для главной страницы с виджетной областью? 404 на форме submit Несколько значений, хранящихся в массиве в мета-запросе Получать смешанные случайные сообщения категории WordPress 3 – как хранятся пароли и как они сравниваются с ними? Сценарий заголовка браузера игнорируется is_page / else условный Как автоматически добавить ссылку редактирования на главную страницу любой темы WordPress?

Получить идентификатор страницы, содержащей вторичный цикл в контенте

Я пытаюсь получить ID (за пределами цикла) страницы, которая имеет петлю другого CPT в своем контенте, используя короткий код.

Если я делаю print_r из get_queried_object() , все, что я получаю, аргументы, используемые для регистрации CPT
Если я echo $post->ID я получаю идентификатор последнего элемента во вторичном цикле.
Если я echo get_queried_object_id() , я получаю 0 все время.

Вот код, который я использую в настоящее время

 function get_meta_values() { global $post; $queried_object = get_queried_object(); echo '<pre>'; print_r( $queried_object ); //Returns args used to register the CPT echo '<br> $queried_object->ID: ' . $queried_object->ID; //Returns Nothing echo '<br>get_queried_object_id(): '. get_queried_object_id(); // Returns 0 all the time echo.'<br>PageID: ' . $post->ID; // Returns the ID of last item in the secondary loop echo '</pre>'; } add_action( 'wp_footer', 'get_meta_values' ); 

Моя цель – получить идентификатор страницы (где короткий код) для извлечения некоторых настраиваемых значений полей.

EDIT: Я использую WooCommerce, но короткий код, который выводит продукты, является обычным. Я знаю, что могу обойти проблему другими способами, но просто любопытно, почему это не работает.

Solutions Collecting From Web of "Получить идентификатор страницы, содержащей вторичный цикл в контенте"

Как выяснили другие: если у вас есть сторонние плагины с пользовательскими запросами, у вас будет плохой день!

Одним из решений может быть кеширование ваших результатов.

Шаблон (например: page.php)

 while (have_posts()): the_post(); global $my_cached_data; $post_id = get_the_ID(); /* * If you have single meta keys, this array_map function * makes them easy to access; otherwise just use: * * $my_cached_data[$post_id] = get_post_meta( $post_id) */ $my_cached_data[$post_id] = array_map( function( $a ) { return $a[0]; }, get_post_meta( $post_id) ); endwhile; 

footer.php

 global $my_cached_data; echo "<pre>".print_r($my_cached_data, true)."</pre>"; 

Возможный результат (с идентификаторами страницы 2 и 15 с одинаковыми метаданными)

 array(2) { [2]=> array(2) { ["meta_key"]=> string(10) "meta_value" ["another_key"]=> string(10) "meta_value" } [15]=> array(2) { ["meta_key"]=> string(10) "meta_value" ["another_key"]=> string(10) "meta_value" } }