Ограничение страниц тегов Wordpress для тегов с более чем 10 связанными сообщениями - PullRequest
0 голосов
/ 04 ноября 2019

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

Я не работал с 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' );
?>

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

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

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

Для этого вы можете использовать template_redirect action hook для выполнения что-то до загрузки страницы архива тегов на экран (что далее будет объяснено что-то ), затем функция 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.

0 голосов
/ 04 ноября 2019

Вы можете сделать следующее, чтобы выполнить свою работу. Вы можете удалить ссылку на теги, количество связанных сообщений в которой меньше 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' );

Коды переходят к функциям вашей активной темы. Php

...