Ограничение страниц тегов Wordpress для тегов с более чем 10 связанными сообщениями

как сказано в заголовке, я пытаюсь написать собственный фильтр WordPress, который ограничивает создание страниц тегов, чтобы страницы тегов создавались только в том случае, если тег имеет более 10 связанных сообщений. Это потому, что у нас так много тегов с ‹10 связанными сообщениями, и это создает много шума.

Я не работал с WordPress уже почти 5 лет, поэтому немного заржавел.

Вот что я пытаюсь, и это не совсем работает:

<?php
function limit_taxonomies_by_count( $args, $taxonomy, $object_type ) {

  $terms = get_terms('post_tag');

  foreach($term in $terms) {
    if ($term->count < 10) {
      $args = array(
        'public' => false
      )
    }
  }

  return $args
}
add_filter('register_taxonomy_args', 'limit_taxonomies_by_count' );
?>

Пожалуйста, дайте мне знать, что мне не хватает!


person Keyfer Mathewson    schedule 04.11.2019    source источник
comment
Вам не хватает точки с запятой после return $args :P Кроме того, когда вы говорите страницы тегов, вы имеете в виду архив тегов (например, tag.php)? Или что-то еще?   -  person cabrerahector    schedule 04.11.2019
comment
@cabrerahector Хороший улов. Спасибо. Я имею в виду этот шаблон: tag-{slug}.php   -  person Keyfer Mathewson    schedule 04.11.2019
comment
Итак, это архив тегов. Однако это звучит немного противоречиво/нелогично для меня: ... ограничивает создание страниц тегов, так что страницы тегов создаются только в том случае, если тег имеет более 10 связанных сообщений. Если вы создаете тег, с ним не связаны никакие сообщения, потому что он еще не существует.   -  person cabrerahector    schedule 04.11.2019
comment
@cabrerahector Ну, у нас более 200 тегов, но только около 100 имеют › 10 постов. Со многими из них связаны 2-3 сообщения, и мы не хотим создавать страницы для них. Это имеет больше смысла?   -  person Keyfer Mathewson    schedule 04.11.2019
comment
Я имею в виду другой подход, который может быть немного менее агрессивным: как насчет скрытия страниц тегов, на которых меньше 10 сообщений? Вы можете использовать хук template_redirect, чтобы проверить, загружается ли страница архива тегов, затем получить количество ее сообщений и выполнить перенаправление куда-то еще (домашнюю страницу? Другой тег?), если на ней менее 10 сообщений.   -  person cabrerahector    schedule 04.11.2019
comment
@cabrerahector О, интересная идея. Как выглядит этот крючок template_redirect?   -  person Keyfer Mathewson    schedule 04.11.2019
comment
Пожалуйста, посмотрите на мой ответ ниже. Дайте знать, если у вас появятся вопросы.   -  person cabrerahector    schedule 04.11.2019


Ответы (2)


Вы можете сделать следующее, чтобы выполнить свою работу. Вы можете удалить те ссылки на теги, количество связанных сообщений которых меньше 10, чтобы посетители никогда не могли нажимать на эти теги.

function modify_term_link_url( $links ) {
    global $post;
    if( !$post ) return $links;
    $terms = get_the_terms( $post->ID, 'post_tag' );
    if ( is_wp_error( $terms ) ) {
        return $terms;
    }
    if ( empty( $terms ) ) {
        return false;
    }
    $links = array();
    foreach ( $terms as $term ) {
        if( $term->count < 10 ){
            $link = '';
        }else{
            $link = get_term_link( $term, 'post_tag' );
            if ( is_wp_error( $link ) ) {
                return $link;
            }
        }
        $links[] = '<a href="' . esc_url( $link ) . '" rel="tag">' . $term->name . '</a>';
    }
    return $links;
}
add_filter( 'term_links-post_tag', 'modify_term_link_url' );

Коды идут в functions.php вашей активной темы.

person itzmekhokan    schedule 04.11.2019
comment
Я полагаю, что таким образом сканеры сайта все равно смогут найти эту страницу с тегами, верно? - person Keyfer Mathewson; 04.11.2019
comment
Я думаю, что если вы можете сделать ту же логику в тегах на одной странице через хук template_redirect с проверкой текущего тега запроса и его количества, просто перенаправьте его на предыдущую страницу. Тогда все будет упорядочено. - person itzmekhokan; 05.11.2019

Вместо того, чтобы запрещать администраторам / редакторам добавлять новые теги, вы можете просто «скрыть» страницы архива тегов, которые не соответствуют критериям (им назначено 10 или более сообщений). Таким образом, администраторы/редакторы могут по-прежнему создавать/использовать новые теги, которые в конечном итоге могут достигать 10 или более сообщений, которые затем сделают их видимыми для посетителей.

Для этого вы можете использовать хук действия template_redirect, чтобы сделать что-нибудь перед тем, как страница архива тегов будет загружена на экран (это что-то объясняется далее), затем is_tag(), чтобы проверить, пытается ли посетитель получить доступ к странице архива тегов, и, наконец, wp_redirect() для фактического перенаправления:

/**
 * Redirects visitors to the homepage for Tags with
 * less than 10 posts associated to them.
 */
function wp76515_tag_maybe_redirect(){
    // We're viewing a Tag archive page
    if ( is_tag() ) {
        // Get Tag object
        $tag = get_tag(get_queried_object_id());
        // Tag's post count
        $post_count = $tag->count;

        // This tag has less than 10 posts,
        // redirect visitor
        if ( $post_count < 10 ) {
            wp_redirect(
                home_url(), // The URL we're sending the visitor to
                '302' // The HTTP status, 302 = 'Moved Temporarily'
            );
        }
    }
}
add_action('template_redirect', 'wp76515_tag_maybe_redirect', 5);

Вы можете изменить код перенаправления на 301 (перемещено навсегда), чтобы также удалить существующие страницы тегов с менее чем 10 сообщениями из индекса Google.

person cabrerahector    schedule 04.11.2019
comment
Объедините этот ответ с приведенным ниже ответом itzmekhoka, и эти редко используемые теги будут недоступны как для посетителей, так и для поисковых систем. По крайней мере, пока они не достигнут 10 сообщений или более. - person cabrerahector; 04.11.2019