Intereting Posts
Получать сообщения, обновленные или опубликованные за последние шесть часов Как включить логин клиента для конкретной страницы администратора Как показать 4 предыдущих сообщения из текущей категории статей в WordPress? Обрезать изображение по горизонтали или по вертикали по коду на основе размера изображения Установите метаданные Редактировать сообщение неактивно Показать ссылку «Читать дальше» только при вставке вручную Почему переходные процессы могут работать неправильно? Отобразить пользовательскую категорию (таксономия) Имя в пользовательском типе сообщения WordPress не отображает все сообщения в базе данных Как отключить публикацию авторов от редактирования комментариев других пользователей Правильный способ создания страницы пользовательского поиска для сложных пользовательских типов сообщений Преимущества использования CSS для изображения заголовка вместо html img tag PHP, Создание динамической переменной Целевые страницы таксономии Добавить различные пользовательские маркеры для разных типов сообщений в API карт Google

Неустранимая ошибка: вызов функции-члена 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() в одном представлении сообщения.