Вопрос или проблема
Плагин, который я использую, создает пользовательский тип записи для статей, т.е. ‘ht_kb’.
На главной странице моей темы у меня есть пользовательский цикл, отображающий последние записи стандартного типа ‘post’. На той же главной странице у меня есть другой пользовательский цикл, отображающий последние записи пользовательского типа ‘ht_kb’ от плагина. Цикл стандартного типа записи работает, как и ожидалось, но в цикле пользовательского типа записи я получаю ошибку, как указано ниже.
Мне сложно понять причину этой ошибки, и я был бы очень признателен, если бы кто-то мог объяснить, что я делаю неправильно и как правильно обрабатывать цикл для пользовательского типа записи.
Цикл ниже работает отлично со стандартным типом ‘post’.
// Запрос
$post_args = array(
'post_type' => array('post'),
'posts_per_page' => 4
);
$post_query = new WP_Query($post_args);
// Цикл
if ($post_query->have_posts()) {
while ($post_query->have_posts()) {
$post_query->the_post();
the_title();
the_category();
the_date();
the_author();
the_excerpt();
}
// сброс цикла
wp_reset_postdata();
}
?>
Цикл пользовательского типа записи ниже возвращает ошибку:
Уведомление: Попытка получить свойство не объекта в C:\localhost\mywebsite\wp-includes\template.php на строке 679
Уведомление: Попытка получить свойство не объекта в C:\localhost\mywebsite\wp-includes\template.php на строке 679
Цикл для пользовательского типа записи
<?php
// Запрос
$article_args = array(
'post_type' => array('ht_kb'),
'posts_per_page' => 4
);
$article_query = new WP_Query($article_args);
// Цикл
if ($article_query->have_posts()) {
while ($article_query->have_posts()) {
$article_query->the_post();
the_title();
the_category();
the_date();
the_author();
the_excerpt();
}
// сброс цикла
wp_reset_postdata();
}
?>
Примечание: Если я закомментирую функцию the_excerpt();, цикл не отображает ошибку и (в некотором роде) работает, как задумано, хотя возникают другие проблемы, такие как то, что функция the_category() не возвращает никакого значения.
Благодарю вас за ваше время и помощь.
Привет, это может быть немного поздно, но я столкнулся с такой же проблемой в своей кастомной теме.
Во-первых, оказалось, что я не создал ни одной пользовательской записи, и во-вторых, из-за того, что записей не было, у меня не было файла content-none в моей теме.
Как только это было добавлено с кодом get_template_part(‘content-parts/content’, ‘none’); ошибка исчезла.
Надеюсь, это поможет кому-то еще 🙂
Ответ или решение
Ошибка «Trying to get property of non-object», возникающая в вашем цикле для пользовательского типа записи (посттайпа) ht_kb
, может быть связана с тем, что в базе данных не существует записей данного типа. В случае, если WP_Query не находит ни одной записи, метод have_posts()
вызовет цикл, но попытка вызвать такие функции, как the_category()
, the_date()
, the_author()
или the_excerpt()
, вызовет ошибку, так как они работают с объектом поста, который в данном случае отсутствует.
Вот как можно исправить эту проблему:
-
Проверьте наличие записей: Убедитесь, что в вашей базе данных действительно существуют записи с типом
ht_kb
. Перейдите в админ-панель WordPress и создайте несколько записей в этом типе поста, если их еще нет. -
Обработка ситуации, когда нет постов: Если у вас нет записей данного типа, лучше обработать это условие и отобразить сообщение для пользователя о том, что записи отсутствуют.
-
Изменение кода: Добавьте обработку ситуации отсутствия постов в ваш цикл. Вот исправленный код для вашего цикла:
<?php
// The Query
$article_args = array(
'post_type' => array('ht_kb'),
'posts_per_page' => 4
);
$article_query = new WP_Query($article_args);
// The Loop
if ($article_query->have_posts()) {
while ($article_query->have_posts()) {
$article_query->the_post();
the_title();
the_category();
the_date();
the_author();
the_excerpt();
}
} else {
// Вывод сообщения о том, что посты не найдены
echo '<p>Записи не найдены.</p>';
}
//reset loop
wp_reset_postdata();
?>
- Использование
get_template_part
для отсутствия контента: Также вы можете создать файл, например,content-none.php
, и использовать его для отображения нужного сообщения, когда посты не найдены:
<?php
if ($article_query->have_posts()) {
while ($article_query->have_posts()) {
$article_query->the_post();
the_title();
the_category();
the_date();
the_author();
the_excerpt();
}
} else {
get_template_part('content-parts/content', 'none');
}
- Проверка дополнительных функций: Если не работает
the_category()
, убедитесь, что действительно назначены категории для ваших записейht_kb
. По умолчанию они могут не иметь категорий, что также повлияет на вывод.
Следуя этим шагам, вы сможете устранить ошибку и улучшить обработку случаев, когда нет записей в кастомном типе постов.