为虚拟页面创建动态SEO友好URL

时间:2020-08-04 作者:randy

我有一个Wordpress网站,它被构建成一个工作列表板,我希望根据数据库中存储的数据创建SEO友好的URL。

URL结构应包括州缩写、城市和职务,并采用以下格式:www.domain.com/job/ca/sacramento/janitor

目前有一个;工作“;后端中使用位于“页面模板/作业模板”的自定义页面模板的页面。php”,在以下URL显示数据库信息:www.domain.com/job/?2020-412341235134

如何显示www.domain.com/job/?2020-412341235134 在友好的虚拟URLwww.domain.com/job/ca/sacramento/janitor.

下面是我如何访问当前页面模板中的数据库信息。

$job_title = $job[0][\'job_title\'];
$sanitized_job_title = str_replace(" ", "-", $job_title);
$bloginfo_url = get_bloginfo(\'url\');
$friendly_url = $bloginfo_url . \'/job/\'. $job[0][\'city\'].\'/\'. $job[0][\'state\'] .\'/\'. $sanitized_job_title;
我已经阅读了add\\u rewrite\\u rule()文档,似乎无法理解它。

任何帮助都将不胜感激。

2 个回复
SO网友:Rolando Garcia

一种方法是创建一个重写规则,该规则将捕获这3个变量,并将它们作为参数提供给作业模板。假设模板slug为;作业(&Q):

function jobquery_rewrite_rule() {
    add_rewrite_rule(
        \'^job/([^/]*)/([^/]*)/([^/]*)/?\',
        \'index.php?pagename=job&state=$matches[1]&city=$matches[2]&job=$matches[3]\',
        \'top\'
    );
}
add_action( \'init\', \'jobquery_rewrite_rule\' );
将此操作插入主题后,必须通过访问设置刷新永久链接规则缓存>;永久链接以使此新重写规则生效。

这将创建3个新的GET参数,您现在可以在作业模板中访问这些参数,但首先需要允许使用query\\u vars\\u filter访问这些参数,以从每个参数创建安全变量:

add_filter( \'query_vars\', \'add_query_vars_filter\' );
function add_query_vars_filter( $vars ) {
  $vars[] = \'state\';
  $vars[] = \'city\';
  $vars[] = \'job\';
  return $vars;
}
如果没有完整的自定义帖子结构或元字段,我很难写出查询内容,但在您的作业模板中,您应该能够将这些GET vars捕获到vars中,您需要构建一个“反向”wp\\u查询来获取该作业的帖子内容:

$state_var = get_query_var(\'state\');
$city_var = get_query_var(\'city\');
$job_var = get_query_var(\'job\');

//Use something like this to find the job based off the passed params
$args = array(
    \'post_type\'  => \'job\',
    \'meta_query\' => array(
        array(
            \'key\'     => \'job_state\',
            \'value\'   => $state_var,
        ),
        array(
            \'key\'     => \'job_city\',
            \'value\'   => $city_var,
        ),
        array(
            \'key\'     => \'job_title\',
            \'value\'   => $job_var,
        ),
    ),
);
$query = new WP_Query( $args );

SO网友:mozboz

如何显示www.domain.com/job/?2020-412341235134 在友好的虚拟URLwww.domain.com/job/ca/sacramento/janitor

好吧,你不能轻易地做到这一点,因为第一个URL中的作业ID没有直接包含在第二个URL中,所以你必须做一些复杂的事情,根据参数“ca/sacramento/guantitor”来查找作业,这会带来大量的复杂性。

一种更简单的方法,你会在许多大型网站上看到,就是在同一个URL中包含ID和SEO友好的内容,这样对SEO有好处,但也很容易在代码中使用,因为它有ID。这也意味着,如果工作所在的城市发生了变化,任何指向旧城市的旧URL的链接都可以正常工作。在您之前的方法中,如果城市发生了变化,那么web上任何位置与旧城市的URL都将中断,除非您进行了一些非常复杂的匹配。

因此,我建议您将URL设置为如下所示:

www.domain.com/job/ca/sacramento/janitor-2020-412341235134
现在您只需要在Wordpress或direct in中编写一个简单的重写规则。htaccess进行映射。为了快速,这里有一个。htaccess示例,但您也可以使用add_rewrite_rule, 您只需要弄清楚如何将URL参数映射到index.php

RewriteRule ^/job/[^/]+/[^/]+/[^-]*-(\\d+-\\d+)$ job/?$1 [L, NC]
所以这里说:

  • /job/ - 匹配此特定字符串[^/]+/ - 两个URL参数不包含“/”,但末尾有/,因此这将匹配到/job/ca/sacramento/
  • [^-]+- - 任何不包括- 使用- 最后,这将匹配/job/ca/sacramento/janitor-
  • (\\d+-\\d+) - 捕获两个中间带“-”的数字字符串

    This htaccess rule is untested, but you can see the approach I\'m suggesting here, and please reply here to work through bugs in this RewriteRule if you use it

    备注:

    htaccess规则需要超出根目录中的WP规则。htaccess类似的方法可以用于WP add\\u rewrite\\u规则,您只需要找出正确的索引。php参数

相关推荐

Reactjs无头WordPress主题配置SEO

我已经将reactjs部署为wp的主题。现在我对react routes的SEO配置有疑问。如果我使用wordpress(headless)作为后端,使用reactjs作为客户端。我应该让reactjs服务器端还是有更多的方法来解决SEO问题。我也用过react头盔,但它只在访问网站时制作标题和内容,不像在共享facebook或谷歌搜索时那样。这是最好的解决方法。