自定义 post 类型 slug 和永久链接问题 - SEO 和结构

Custom post Types slug and permalinks issue - SEO and Structure

我看到之前有人提出过这个问题,但他们似乎没有解决我的具体问题。我确实觉得我的具体问题是一个广泛的问题。这可能看起来很矛盾,但请听我说完。

对于我在 WordPress 中工作的网站,我为他们所服务的县创建了一些页面。到目前为止,我有一个用于雄鹿、蒙哥马利和特拉华县,但还会有更多。从那里我们希望人们能够根据客户可以自己添加的县导航到 "Recent Jobs"。所以它可以是 1 到客户想要添加的工作数量。这些页面将讨论特定城镇的特定工作,然后按工作类型(而不是县)link 到 "Related Jobs"。所以这些深入 3 级,县中心页面 > 特定城镇的特定工作 > 特定工作类型(即:宾夕法尼亚州巴克斯县 > Window 宾夕法尼亚州纽敦的替代工作 > Window 任何地方的替代工作) .

希望这是有道理的。所以我所做的是为每个县创建一个页面。然后我创建了一个自定义 Post 类型:County Jobs。我为每个县创建了自定义分类法,以按县对它们进行分组。我可能还需要分类法来按工作类型对它们进行分组,但我还没有。我将模板 "single-county-job.php" 和自定义字段设置为仅在此 post 类型上显示。当 post 类型的 slug“/county-job/”显示在 URL 中时,问题就来了。添加额外的级别不利于 SEO 排名。如果您在 Google 中搜索任何内容,您将看到结果的第一页显示只有两层深度的网站:"URL.com/level1/level2" 并且带有“/level3/”的任何内容最多位于第三页(除了像亚马逊或易趣这样的网站)。我希望 URL 是:“/bucks-county-pa/post-title”而不是“/county-job/bucks-county-pa/post-title”。用户从“/bucks-county/”页面转到“/county-job/bucks-county-pa/post-title”也是没有意义的。

所以我找到了多种方法来从 URL 中取出 slug,但所有方法都会导致 404。基本上 WordPress 不再将 post 识别为 post。我可以添加一些重定向规则来绕过 404,但这对 SEO 也不利。我还读到这是不好的做法,是一种黑客行为,不应该这样做。

您以前是否设置过类似的pages/posts,您是如何处理的?那个 slug 是个问题,但是为每个县制作 CPT 也不是一种选择,因为数量太多而且它们都是相同的设置 - 这根本没有意义。也许这不应该是 CPT,但我该如何处理呢?它们似乎不应该是页面,我将如何处理自定义字段?

我卡住了!您可以提供的任何帮助或见解都将是一个巨大的帮助。

考虑到单词 county 在您的 url 中是静态的,您可以使用它来让 Wordpress 识别您尝试请求的内容。您可以使用 generate_rewrite_rules 过滤器来添加您自己的重写规则:

add_filter('generate_rewrite_rules', 'my_rewrite', 9);
function my_rewrite($wp_rewrite)
{
    $wp_rewrite->rules = array_merge(array(
        '^([^-]*)-county-([^/]*)/([^/]*)/?$' => 'index.php?post_type=county-job&county=$matches[1]-county-$matches[2]&county-job‌​=$matches[3]'
    ), $wp_rewrite->rules);
}

第二个重要部分是告诉 Worpdress 不要再使用以 /county-job/ 作为前缀的链接。您可以使用 post_type_link 过滤器执行此操作:

add_filter('post_type_link', 'my_post_link', 1, 3);
add_filter('post_link', 'my_post_link', 10, 3);
add_filter('page_link', 'my_post_link', 10, 3);
function my_post_link($post_link, $id = 0) {
  $post = get_post($id);
  if(is_object($post) && $post->post_type == 'job') {
      return str_replace('county-job/', '', $post_link);
  }
  return $post_link;
}

不要忘记您需要刷新重写规则才能使此脚本正常工作。您可以通过访问 WP 后台的永久链接部分来完成此操作。