Как вывести Meta Description под Meta Title в ACF в WC?

Ссылка скопирована
1 ответ

Сейчас вывел в head ACF свой дескрипшн. Но он далеко от meta title, какой хук, экшн или фильтр использовать, чтобы разместить под meta title?

/** Meta Desc - страницы товара */ add_action( 'wp_head', 'head_seo_meta_desc' ); function head_seo_meta_desc(){          if (is_product()) {         $info = get_field( 'wc_description' ); // get custom field         echo '<meta name="description" content="' . $info . '">'; // echo it out     } else {         echo '<meta name="description" content="Описания нет">'; // echo it out     } 	 }

/** Meta Desc - страницы товара */ add_action( 'wp_head', 'head_seo_meta_desc' ); function head_seo_meta_desc(){ if (is_product()) { $info = get_field( 'wc_description' ); // get custom field echo '<meta name="description" content="' . $info . '">'; // echo it out } else { echo '<meta name="description" content="Описания нет">'; // echo it out } }

Дополнительно:

Ответы:

Разобрался. Сортировку можно выставить в конце экшена)

add_action( 'wp_head', 'head_seo_meta_desc', 1 );

Выводится почти под title

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Редакция DevOps Ответ

Технически порядок meta-тегов внутри head обычно не критичен: браузеру и поисковику не важно, стоит description сразу под title или несколькими строками ниже. Но если нужно управлять порядком вывода, у wp_head есть приоритет. Чем меньше число, тем раньше выполнится функция.

Ваш пример можно оформить безопаснее:

add_action('wp_head', 'head_seo_meta_desc', 1);
 
function head_seo_meta_desc() {
    if (!is_product()) {
        return;
    }
 
    $info = get_field('wc_description');
    if (!$info) {
        return;
    }
 
    echo '<meta name="description" content="' . esc_attr($info) . '">' . "n";
}

add_action('wp_head', 'head_seo_meta_desc', 1); function head_seo_meta_desc() { if (!is_product()) { return; } $info = get_field('wc_description'); if (!$info) { return; } echo '<meta name="description" content="' . esc_attr($info) . '">' . "n"; }

Обязательно используйте esc_attr(), потому что description попадает в HTML-атрибут. Без экранирования кавычки и спецсимволы могут сломать разметку.

Но важнее другое: если на сайте установлен Yoast, Rank Math или другой SEO-плагин, не нужно параллельно выводить свой meta name="description". Получится два description, и это хуже, чем “не под title”. В таком случае лучше отдавать значение в фильтр SEO-плагина.

Для Yoast:

add_filter('wpseo_metadesc', function ($desc) {
    if (is_product()) {
        $custom = get_field('wc_description');
        return $custom ?: $desc;
    }
    return $desc;
});

add_filter('wpseo_metadesc', function ($desc) { if (is_product()) { $custom = get_field('wc_description'); return $custom ?: $desc; } return $desc; });

Так description будет один, в правильном месте и без конфликта с SEO-плагином.

Отдельно проверьте исходный код страницы после правки. На товаре должен быть один тег meta name="description". Если их два, поисковик сам выберет, какой учитывать, а результат может отличаться от ожидаемого. Также не выводите “Описания нет” как meta description для всех остальных страниц: это создаст массовые дубли. Для страниц без своего описания лучше вообще ничего не добавлять и дать SEO-плагину сформировать fallback.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно