@Ysery

Поведайте, пожалуйста, как из кода плагина Wp postratings исключить вывод мета (сделать кастомный вывод для постов заданной категории)?

Добрый день. Не являюсь программистом, но очень хочу прокачать используемый плагин звёздочек. Как вывести немного другой текст на непосредственно звёздочках в постах определённой категории я разобрался (обрамляя код if(in_category(90)) ), а вот как сделать кастомный вывод метатегов (кода структурированных данных), не смог :-(

Очень хотел за место полного сниппета, выводить в всех постах, что располагаются в одной категории (идёт под ID 90) только вот эти (и, конечно, сами графические звёздочки и текст (голосов: *, средний балл: * из 5)):

<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
        <span itemprop="ratingValue">***</span> 
        <span itemprop="ratingCount">***</span>
      </div>

Т.е. речь идёт именно о техническом снипете для Google.

Согласно рекомендации Google для программ https://developers.google.com/search/docs/data-typ...

Вот в этом коде осуществляется настройка (хотя может настройка вывода осуществляется в другом месте, так что на всякий случай прилагаю сам файл).


// Google Rich Snippet
    	$google_structured_data = '';
        $ratings_options['richsnippet'] = isset( $ratings_options['richsnippet'] ) ? $ratings_options['richsnippet'] : 1;
        if( $ratings_options['richsnippet'] && is_singular() && $is_main_loop ) {
            $itemtype = apply_filters( 'wp_postratings_schema_itemtype', 'itemscope itemtype="http://schema.org/Article"' );
    
            if( empty( $post_excerpt ) ) {
                $post_excerpt = ratings_post_excerpt( $post_id, $post->post_excerpt, $post->post_content, $post->post_password );
            }
            $post_meta = '<meta itemprop="headline" content="' . esc_attr( $post_title ) . '" />';
            $post_meta .= '<meta itemprop="description" content="' . wp_kses( $post_excerpt, array() ) . '" />';
            $post_meta .= '<meta itemprop="datePublished" content="' . mysql2date( 'c', $post->post_date, false ) . '" />';
            $post_meta .= '<meta itemprop="dateModified" content="' . mysql2date( 'c', $post->post_modified, false ) . '" />';
            $post_meta .= '<meta itemprop="url" content="' . $post_link . '" />';
            $post_meta .= '<meta itemprop="author" content="Test.ru" />';
            $post_meta .= '<meta itemprop="mainEntityOfPage" content="' . get_permalink() . '" />';
            // Image
            if( has_post_thumbnail() ) {
                $thumbnail = wp_get_attachment_image_src( get_post_thumbnail_id( null ) );
                if( ! empty( $thumbnail ) ) {
                    $post_meta .= '<div style="display: none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">';
                    $post_meta .= '<meta itemprop="url" content="' . $thumbnail[0] . '" />';
                    $post_meta .= '<meta itemprop="width" content="' . $thumbnail[1] . '" />';
                    $post_meta .= '<meta itemprop="height" content="' . $thumbnail[2] . '" />';
                    $post_meta .= '</div>';
                }
            }
            // Publisher
            $site_logo = '';
            if ( function_exists( 'the_custom_logo' ) ) {
                $custom_logo_id = get_theme_mod( 'custom_logo' );
                if ( $custom_logo_id ) {
                    $custom_logo = wp_get_attachment_image_src( $custom_logo_id, 'full' );
                    $site_logo = $custom_logo[0];
                }
            }
            if( empty( $site_logo ) ) {
                if( has_header_image() ) {
                    $header_image = get_header_image();
                    if( ! empty( $header_image ) ) {
                        $site_logo = $header_image;
                    }
                }
            }
            $site_logo = apply_filters( 'wp_postratings_site_logo', $site_logo );
            $post_meta .= '<div style="display: none;" itemprop="publisher" itemscope itemtype="https://schema.org/Organization">';
            $post_meta .= '<meta itemprop="name" content="' . get_bloginfo( 'name' ) . '" />';
            $post_meta .= '<div itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">';
            $post_meta .= '<meta itemprop="url" content="' . $site_logo . '" />';
            $post_meta .= '</div>';
            $post_meta .= '</div>';
    
            $ratings_meta = '';
            if( $post_ratings_average > 0 ) {
                $ratings_meta .= '<div style="display: none;" itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">';
                $ratings_meta .= '<meta itemprop="bestRating" content="' . $ratings_max . '" />';
                $ratings_meta .= '<meta itemprop="worstRating" content="1" />';
                $ratings_meta .= '<meta itemprop="ratingValue" content="' . $post_ratings_average . '" />';
                $ratings_meta .= '<meta itemprop="ratingCount" content="' . $post_ratings_users . '" />';
                $ratings_meta .= '</div>';
            }
    
            $google_structured_data =  apply_filters( 'wp_postratings_google_structured_data', ( empty( $itemtype ) ? $ratings_meta : ( $post_meta . $ratings_meta ) ) );
        }
    
        return apply_filters( 'expand_ratings_template', ( $value . $google_structured_data ) );
    }


Заранее спасибо за ответ.
  • Вопрос задан
  • 521 просмотр
Пригласить эксперта
Ответы на вопрос 1
@raxweb
Лучше выводить информацию не метатегами, а присвоить существующим тегам микроразметку.

Для более новых версий плагина нужно просто поставить галочку "rich snippet google".

Вывод микроразметки для старой версии плагина настраивается в админке:

Рейтинги -> Шаблоны рейтингов.

Для добавления микроразметки я изменил шаблон "Текст рейтингов, если пользователь еще не оценил запись" так:

<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">%RATINGS_IMAGES_VOTE%<br />(<strong itemprop="ratingCount">%RATINGS_USERS%</strong> голосов, средний: <strong itemprop="ratingValue">%RATINGS_AVERAGE%</strong> из %RATINGS_MAX%)</div>


Вот примеры:
gamva.ru/klassicheskij-billiard
gamva.ru/zemlya-amazonki
gamva.ru/borba-za-ostrov

Но микроразметка рейтинга не проходила валидацию в Яндексе.

Яндексу не хватало такого свойства:

itemscope itemtype="http://schema.org/WebPage"

Я поставил это свойство в главный div с контентом:

<div id="mainContent" itemscope itemtype="http://schema.org/WebPage">


После этого в Яндексе сайт прошел валидацию.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы