• Как добавить noindex для постов из определенной категории Wordpress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Могу предложить вам решение не связанное с Rank Math или Yoast. Вы можете написать любые условия и вывести meta noindex на хуке wp_head

    add_action( 'wp_head', 'skill_noindex', 1 );
    if ( !function_exists( 'skill_noindex' ) ) {
    	function skill_noindex() {
    
    		// закрываем от индексации пустые архивные страницы (таксономии, категории, теги)
    		if( is_archive() && !have_posts() ) {
    			echo '<meta name="robots" content="noindex, nofollow, noarchive"/>';
    		}
    
    		// закрываем от индексации категорию "отзывы"
    		if ( is_category( 'testimonials' ) ) {
    			echo '<meta name="robots" content="noindex, nofollow, noarchive"/>';
    		}
    
    		// проверяем, что тип записи - post, но достаточно проверять is_single()
    		if ( get_post_type() === 'post' ) {
    			// получаем категории поста
    			if ( $categories = get_the_category( get_queried_object_id() ) ) {
    				foreach ( $categories as $key => $category ) {
    					// проверяем, что в массиве есть категория Новости
    					if ( $category->slug == 'news' ) {
    						echo '<meta name="robots" content="noindex, nofollow, noarchive"/>';
    					}
    				}
    			}
    		}
    
    	}
    }


    UPDATE

    С версии 5.7 для этого появился фильтр, пользоваться так:

    add_filter( 'wp_robots', 'skill_robots' );
    if ( !function_exists( 'skill_robots' ) ) {
      function skill_robots( $robots ) {
    
        if ( is_archive() && !have_posts() ) {
          $robots['noindex'] = true;
          $robots['nofollow'] = true;
        }
    
        $robots['max-snippet'] = '-1';
        $robots['max-image-preview'] = 'large';
        $robots['max-video-preview'] = '-1';
    
        return $robots;
      }
    }
    Ответ написан
    7 комментариев