【问题标题】:Limiting Wordpress Tag Pages for Tags with more than 10 associated posts限制包含 10 个以上相关帖子的标签的 Wordpress 标签页面
【发布时间】:2019-11-04 16:59:30
【问题描述】:

正如标题所说,我正在尝试编写一个自定义 WordPress 过滤器,它限制标签页面的创建,以便仅当标签具有超过 10 个相关帖子时才创建标签页面。这是因为我们有很多标签,相关帖子少于 10 个,这会产生很多噪音。

我已经快 5 年没有使用 WordPress 了,所以我有点生疏了。

这是我正在尝试的方法,但效果不太好:

<?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' );
?>

请让我知道我错过了什么!

【问题讨论】:

  • 您在return $args 之后缺少分号:P 除此之外,当您说“标签页”时,您的意思是标签存档(例如tag.php)?还是别的什么?
  • @cabrerahector 不错的收获。谢谢你。我的意思是这个模板:tag-{slug}.php
  • 好的,这是标签存档。然而,这对我来说听起来有点矛盾/不合逻辑:“......限制标签页面的创建,以便标签页面只有在标签有超过 10 个相关帖子时才会创建。”如果您正在创建一个标签,它没有任何关联的帖子,因为它还不存在。
  • @cabrerahector 好吧,我们有 200 多个标签,但只有约 100 个标签有 > 10 个帖子。其中相当一部分关联了 2-3 个帖子,我们不想为这些帖子创建页面。这更有意义吗?
  • 我想到了一个不同的方法,它可能不那么激进:hiding 标签页面少于 10 个帖子怎么样?您可以使用template_redirect 挂钩来检查标签存档页面何时加载,然后获取其帖子计数并重定向到其他地方(主页?另一个标签?)如果它的帖子少于 10 个。

标签: php wordpress taxonomy add-filter


【解决方案1】:

您可以执行以下操作来完成您的工作。您可以删除那些关联帖子数少于 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

【讨论】:

  • 我相信,使用这种方式,网站爬虫仍然可以找到该标签页,对吗?
  • 我认为如果您可以通过template_redirect 钩子在标签单页中执行相同的逻辑并检查当前查询标签及其计数,只需重定向到它的上一页。然后一切都会被排序。
【解决方案2】:

您可以“隐藏”不符合条件的标签存档页面(分配给它们的 10 个或更多帖子),而不是阻止管理员/编辑添加新标签。这样,管理员/编辑仍然可以创建/使用最终可能达到 10 个或更多帖子的新标签,这将使访问者可以看到它们。

为此,您可以在标记存档页面加载到屏幕上之前使用template_redirect 操作挂钩来执行something(接下来将解释something),然后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(永久移动)以从 Google 索引中删除帖子少于 10 个的现有标签页。

【讨论】:

  • 将此答案与下面的 itzmekhoka 结合起来,访问者和搜索引擎都无法访问这些几乎不使用的标签。至少在他们达到 10 个或更多帖子之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多