Intereting Posts
Is 'preload = "none"' допустимый параметр в коротком коде в WordPress 3.6? Есть ли способ сбросить все зарегистрированные боковые панели / виджеты? Изменение мета ключей в User Meta Pro с использованием user_meta_pre_user_register не работает Какие права следует предоставлять каталогам, если я хочу сделать WordPress более безопасным? Как добавить кнопку короткого кода в редактор TinyMCE? Помощь в функции WP gallery, обертка галереи в div WooCommerce – различные значки для категорий продуктов save_post не запускается, когда сообщение обновляется Добавление настраиваемых полей в изображения Миграция моего существующего сайта WP на localhost Установите два стандартных изображения по умолчанию Проблема получения информации и отображения желаемой структуры с пользовательским типом сообщения и таксономией jShowOff не показывает числовые ссылки, вместо этого отображается «undefined» WordPress загружает JQuery автоматически – моя идея правильная, чтобы добавить ее в нижний колонтитул? Обновление второй части WordPress edit_user_profile_update

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

Я пытаюсь получить 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" } }