我不确定问我想实现什么目标的最佳方式,所以我将在这里描述它。如果有人能找出一种更简洁的方式来问这个问题,或者有人以不同的方式回答了这个问题,请让我知道!
例如,我将描述一个摄影师的WordPress网站,那里有一个公文包归档页面,列出可用的分类法,比如自然、风景和肖像。
这个公文包页面有一个条目网格,显示所有不同的公文包分类。在网格上方,将有一个导航栏,列出这些分类法:
All | Nature | Landscape | Portraits
单击其中一个分类菜单选项时,网格将使用JavaScript过滤到用户选择。例如,单击“Nature”时,仅显示Nature条目,其他所有条目均不可见。
自然分类法也有自己的页面,可以通过slug:mysite访问。com/portfolio/nature-我不希望此页面存在。
我希望能够使用上面的Nature URL转到公文包归档页面,并在页面准备就绪时通过JavaScript将其过滤到Nature条目。
Essentially, I would like the URL mysite.com/portfolio/nature to act as mysite.com/portfolio/?tax=nature - 其中,tax GET var将在PHP中注册(随后输出到JavaScript),然后加载父投资组合归档页面。
我不想在实际的JavaScript实现方面寻求任何帮助,我想知道如何处理URL重写(?)在WordPress中。
实现这一目标的最佳方式是什么?谢谢
SO网友:Milo
首先,注册一个自定义查询变量以传递分类术语。我们希望查询忽略此值,因此我们不会在规则中使用分类法的实际slug。
function wpd_add_query_var( $query_vars ) {
$query_vars[] = \'wpd_term\';
return $query_vars;
}
add_filter( \'query_vars\', \'wpd_add_query_var\' );
对于规则,我们只需要设置
post_type=slug
要触发post类型存档,其中
slug
是向其注册post类型的slug。如果您不确定这是什么,可以在管理员中查看该帖子类型的列表屏幕时,在URL中看到它。我们还将自定义查询变量设置为URL中传递的任何内容。
function wp_add_rewrite_rule() {
add_rewrite_rule(
\'portfolio/([^/]+)/?$\',
\'index.php?post_type=portfolio&wpd_term=$matches[1]\',
\'top\'
);
}
add_action( \'init\', \'wp_add_rewrite_rule\' );
添加后,请访问设置>永久链接管理页面刷新规则。
然后,您可以在使用解析查询后访问该值get_query_var( \'wpd_term\' )
.
还可以看看wp_enqueue_script
和wp_localize_script
用于将该值输入脚本的函数。