WORDPRESS
#wordpress#json-ld#custom-post-type#schema-org#blogposting#wp_head#seo

WordPress: JSON-LD BlogPosting для CPT без класса (functions.php)

Минимальный вывод JSON-LD для Custom Post Type одной функцией в functions.php. Подходит когда не нужен полный набор полей schema.org и достаточно базовых author, datePublished, publisher.

Как использовать

  1. Вставьте код в wp-content/themes/your-theme/functions.php.
  2. Замените массив target_types на slug вашего CPT (например ['articles', 'news']).
  3. Проверьте вывод через просмотр исходного кода страницы или 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');
}

Замечания

Подробнее: WordPress: JSON-LD для CPT — дубли и ошибки.