Ошибка цикла пользовательского типа записи: Попытка получить свойство не-объекта

Вопрос или проблема

Плагин, который я использую, создает пользовательский тип записи для статей, т.е. ‘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(), вызовет ошибку, так как они работают с объектом поста, который в данном случае отсутствует.

Вот как можно исправить эту проблему:

  1. Проверьте наличие записей: Убедитесь, что в вашей базе данных действительно существуют записи с типом ht_kb. Перейдите в админ-панель WordPress и создайте несколько записей в этом типе поста, если их еще нет.

  2. Обработка ситуации, когда нет постов: Если у вас нет записей данного типа, лучше обработать это условие и отобразить сообщение для пользователя о том, что записи отсутствуют.

  3. Изменение кода: Добавьте обработку ситуации отсутствия постов в ваш цикл. Вот исправленный код для вашего цикла:

<?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();

?>
  1. Использование 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');
}
  1. Проверка дополнительных функций: Если не работает the_category(), убедитесь, что действительно назначены категории для ваших записей ht_kb. По умолчанию они могут не иметь категорий, что также повлияет на вывод.

Следуя этим шагам, вы сможете устранить ошибку и улучшить обработку случаев, когда нет записей в кастомном типе постов.

Оцените материал
Добавить комментарий

Капча загружается...