Intereting Posts
Сохранение (обновление) Редактирование сообщений / страниц с помощью AJAX Удалите теги без определенного мета-ключа из «выбрать из самых используемых тегов» Отображать стандартную таксономию типа почтового типа Почему эта проверка позволяет проверить, разрешено ли пользователю редактировать сообщение, для всех, кроме супер-администраторов? Frontend в WP, backend в Laravel. Необходим определенный уровень интеграции WPMU по MySQL ограничен 1 ГБ пространства? Когда вы удаляете сообщение, также комментарии связанные с мусором Вложенная meta_query с несколькими ключами отношения Переписать URL-адрес в адресной строке для определенной страницы Как заставить загрузить страницу в плагине? Удалить swfobject.js в wp_head () Как перевести строки __ ('') в admin Как показать ссылку на главную страницу в WordPress Menu и как добавить к ней значок? Как использовать категории, подкатегории и настраивать навигацию Панель администратора полностью исчезает в теме 2010 года

Неустранимая ошибка: вызов функции-члена get_queried_object_id ()

Я пытаюсь отобразить короткий код, используя следующий шаблон:

class callShortCode { function __construct() { global $post; $this->dos($post); } private function dos($post){ global $post; $pid = get_the_ID(); $archive_id = get_queried_object_id(); if($archive_id == $pid) { add_action('wp_footer', array($this, 'show')); } } // shortcode call function show($post) { $pid = get_the_ID(); $archive_id = get_queried_object_id(); $the_query = new WP_Query( array('post_type' => 'custom_post_type') ); if ($the_query->have_posts()) { while ($the_query->have_posts()){ $the_query->the_post(); if($pid == $archive_id) { echo do_shortcode("[my_shortcode id='5']"); } } } } } new callShortCode(); 

Но он возвращает ошибку, как это на переднем конце:

 Fatal error: Call to a member function get_queried_object_id() on a non-object in D:\xxxx\xxxx\xxxxx\wp-includes\query.php on line xx 

Я пытаюсь завершить его с помощью действия init но он не хочет читать текущий идентификатор страницы в интерфейсе и ничего не показывать. Я проверил, что $pid = get_the_ID(); и $archive_id = get_queried_object_id(); возвращает 0, когда я использовал крючок init для вызова объекта.

Я также завернул его с помощью plugins_loaded но он возвращает ту же фатальную ошибку!

Я знаю, это потому, что его называют слишком рано! Но что я могу сделать, чтобы он работал правильно?

Solutions Collecting From Web of "Неустранимая ошибка: вызов функции-члена get_queried_object_id ()"

Создайте экземпляр объекта внутри функции, связанной с действием template_redirect :

 function wpse_177056_init_shortcode() { new callShortCode(); } add_action( 'template_redirect', 'wpse_177056_init_shortcode' ); 

Идентификатор текущего объекта доступен только после того, как был выполнен фактический основной запрос. Кроме того, get_queried_object_id() использует global $wp_query объект global $wp_query ; если этот объект не был настроен, вызов некоторых его методов или свойств не будет работать.

Итак, вы должны использовать get_queried_object_id() позже. В соответствии с кодом x , действие hook wp является первым доступным после того, как объект WP был настроен. В вашем случае вы можете также wp_footer действие wp_footer напрямую, как и при попытке выполнить wp_footer :

 class callShortCode { function __construct() { $this->dos(); } function dos() { $archive_id = get_queried_object_id(); //Replace with your logic if( $archive_id === 451) { $this->show(); } } // shortcode call function show() { $the_query = new WP_Query( array('post_type' => 'custom_post_type') ); if ($the_query->have_posts()) { while ($the_query->have_posts()){ $the_query->the_post(); echo do_shortcode("[my_shortcode id='5']"); } } wp_reset_postdata(); } } add_action( 'wp_footer', function() { new callShortCode; }); 

Примечание . Я удалил checing из $pid == $archive_id потому что на самом деле я не понимаю вашу логику: вы используете $pid = get_the_ID(); и get_the_ID() должен возвращать тот же самый эффект get_queried_object_id() в одном представлении сообщения.