Как получить мета-заголовок страницы, настроенной как блог (цикл)

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

Я использую функцию для вывода заголовков для каждого типа контента. Я также настроил новый метабокс в записях и страницах для ввода тега заголовка.

Это часть функции для вывода заголовков:

//...
elseif (is_page() || is_single()) { //Заголовок страницы и поста
    global $post;
    $metatitle = get_post_meta($post->ID, 'metatitle_value_key', true);
    if ($metatitle) {
        echo stripslashes($metatitle);
    } else {
        the_title();
    }
}
//...
else { wp_title(''); }

Это прекрасно работает для постов и страниц, за исключением случаев, когда я выбираю статическую домашнюю страницу и страницу блога (это пустая страница, созданная ранее). Благодаря последнему else выводится обычный заголовок страницы ‘Блог’, но не выводится метабокс с метатегом ‘Мой метатег’.

Я подумал, что это из-за идентификатора поста, поэтому я разделил is_page() и is_post(), пытаясь вывести идентификатор страницы из цикла, с помощью этого кода $page_id = get_queried_object_id();, но он не сработал. Следующий код — это то, что у меня есть:

//...
elseif (is_page()) { //Заголовок страницы
    global $post;
    $page_id = get_queried_object_id();
    $metatitle = get_post_meta($page_id, 'metatitle_value_key', true);
    if ($metatitle) {
        echo stripslashes($metatitle);
    } else {
        the_title();
    }
} //...

Что я могу попробовать сделать? Возможно, проблема связана с тем, как вставляется метабокс, он использует $post_id каждый раз. В любом случае, я не уверен, потому что это работает как для постов, так и для страниц.

Хорошо, я сам нашел метод. Вот код:

//...
elseif (is_page() || is_single()) { //Заголовок страницы и поста
    global $post;
    $metatitle = get_post_meta($post->ID, 'metatitle_value_key', true);
    if ($metatitle) {
        echo stripslashes($metatitle);
    } else {
        the_title();
    }
} elseif (is_home()) { //Используем is_home для страницы блога

    //И используем get_queried_object        
    $page_object = get_queried_object();
    $metatitle = get_post_meta($page_object->ID, 'metatitle_value_key', true);
    if ($metatitle) {
        echo stripslashes($metatitle);
    } else {
        the_title();
    }
}
//...

Ответ или решение

Чтобы получить мета-заголовок страницы, настроенной как блог, необходимо использовать правильный механизм WordPress для извлечения метаданных. В вашей ситуации у вас уже есть хорошо настроенный код, но он не возвращает нужный мета-заголовок на странице блога, созданной как статическая домашняя страница. Давайте разберемся, как решить эту проблему.

Анализ проблемы

В вашем исходном коде вы корректно извлекаете мета-заголовок для обычных страниц и постов, используя get_post_meta() с ID поста. Однако, когда вы обращаетесь к странице блога (при помощи is_home()), данный метод не срабатывает, поскольку is_home() не возвращает ID поста, который вы могли бы использовать.

Решение

Правильный подход заключается в использовании функции get_queried_object(), которая поможет извлечь объект текущей страницы блога и получить его идентификатор. Вот пример исправленного кода:

//...
elseif (is_page() || is_single()) { // Заголовок страницы и поста
    global $post;
    $metatitle = get_post_meta($post->ID, 'metatitle_value_key', true);
    if ($metatitle) {
        echo stripslashes($metatitle);
    } else {
        the_title();
    }
} elseif (is_home()) { // Использование is_home для страницы блога
    $page_object = get_queried_object(); // Получаем объект страницы блога
    if ($page_object) { // Проверяем, существует ли объект
        $metatitle = get_post_meta($page_object->ID, 'metatitle_value_key', true);
        if ($metatitle) {
            echo stripslashes($metatitle);
        } else {
            the_title();
        }
    } else {
        the_title(); // В случае ошибки выводим обычный заголовок
    }
}
//...

Объяснение кода:

  1. Проверка страницы и поста: Сначала вы обрабатываете заголовки для страниц и постов. Если мета-заголовок существует, вы его выводите. В противном случае выводится заголовок поста или страницы по умолчанию.

  2. Обработка страницы блога: В следующей части кода, когда выполняется условие is_home(), вы получаете объект текущей страницы с помощью get_queried_object(). Это необходимо, потому что блоги, настроенные как статические страницы, не соответствуют стандартным постам или страницам.

  3. Извлечение мета-заголовка: Если объект страницы блога существует, код извлекает его ID и использует get_post_meta() для получения значения мета-заголовка. Если мета-заголовок найден, он выводится; в противном случае используется обычный заголовок.

Заключение

Теперь ваш код корректно извлекает мета-заголовки для страниц блога, что позволит обеспечить оптимизацию для SEO и улучшить пользовательский опыт. Убедитесь, что метабокс для мета-заголовка правильно сохранен и доступен для соответствующей страницы блога. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обратиться за помощью.

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

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