WordPress: JSON-LD BlogPosting для CPT без класса (functions.php)
Минимальный вывод JSON-LD для Custom Post Type одной функцией в functions.php. Подходит когда не нужен полный набор полей schema.org и достаточно базовых author, datePublished, publisher.
Как использовать
- Вставьте код в wp-content/themes/your-theme/functions.php.
- Замените массив target_types на slug вашего CPT (например ['articles', 'news']).
- Проверьте вывод через просмотр исходного кода страницы или Google Rich Results Test.
Упрощённый вариант вывода JSON-LD типа BlogPosting для single-страниц CPT без отдельного класса. Используются wp_head, wp_json_encode() и did_action() для защиты от дублей.
Код для functions.php
<?php
add_action('wp_head', 'custom_cpt_jsonld_output', 10);
function custom_cpt_jsonld_output() {
$target_types = ['articles', 'news'];
if (!is_singular($target_types)) {
return;
}
if (did_action('jsonld_cpt_output')) {
return;
}
global $post;
if (!$post) return;
$schema = [
'@context' => 'https://schema.org',
'@type' => 'BlogPosting',
'headline' => get_the_title($post->ID),
'datePublished' => get_the_date('c', $post),
'dateModified' => get_the_modified_date('c', $post),
'author' => [
'@type' => 'Person',
'name' => get_the_author_meta('display_name', $post->post_author)
],
'publisher' => [
'@type' => 'Organization',
'name' => get_bloginfo('name')
]
];
echo '<script type="application/ld+json">' . "\n";
echo wp_json_encode($schema, JSON_UNESCAPED_UNICODE);
echo "\n" . '</script>' . "\n";
do_action('jsonld_cpt_output');
}
Замечания
- Обязательные поля для BlogPosting по документации Google: headline, datePublished, author, publisher — в сниппете присутствуют.
- Для изображения, mainEntityOfPage, articleSection используйте полный вариант: сниппет «JSON-LD класс для CPT».
Подробнее: WordPress: JSON-LD для CPT — дубли и ошибки.