我在WordPress外部有一个数据库表,需要为其创建端点。我已经创建了一个页面/cars/
我计划使用页面模板生成链接。我希望url看起来像/cars/camaro/
()/cars/%model%/
). 起初,我认为我可以使用端点,但不知道如何根据从模型表中提取的段塞使它们动态。我也不确定使用Permalink结构标签是更容易还是更好。
我甚至不完全确定从哪里开始,我以前创建过“静态”端点,所以我有一个基础可以跳出,但当我到达request
我不知道该怎么办。
/**
* Add endpoint to handle models
*/
function theme_endpoints() {
add_rewrite_endpoint( \'cars\', \'EP_PAGES\' ); // Since cars is our base
}
add_action( \'init\', \'theme_endpoints\' );
/**
* Filter request variables
* @param array $vars
* @return array $vars
*/
function theme_perma_requests( $vars ) {
if( isset( $vars[\'model\'] ) ) {
$vars[\'model_template\'] = true;
}
return $vars;
}
add_filter( \'request\', \'theme_perma_requests\' );
我的意思是,这允许我在模板中包含(这就是为什么我添加了
model_template
变量),但它实际上不会重写URL。然后我开始玩
add_rewrite_rule()
/**
* Theme rewrite rules
*/
function theme_rewrite_rules() {
add_rewrite_rule( \'^cars/([^/]*)/?$\', \'index.php?page_id=8&model=$matches[0]\', \'top\' );
}
add_action( \'init\', \'theme_rewrite_rules\' );
我已经刷新了永久链接,但重写似乎没有生效,我只能假设规则的编写方式有问题。
我需要端点和重写规则,还是只需要其中一个?我是不是做错了?如何实现的permalink结构/cars/camaro/
?
最合适的回答,由SO网友:jonathanbardo 整理而成
10up工程最佳实践是如何实现这一目标的一个很好的例子。基本上,您可以添加一个新的重写标记和一个新的重写规则,然后使用template\\u redirect操作返回自定义操作。
代码如下:
add_action( \'init\', function() {
add_rewrite_tag( \'%model%\', \'([^/]+)\' );
add_rewrite_rule( \'cars/([^/]+)/?\', \'index.php?model=$matches[1]\', \'top\' );
} );
add_action( \'template_redirect\', function() {
global $wp_query;
$model = $wp_query->get( \'model\' );
if ( ! empty( $model ) ) {
// Return stuff here
}
} );
在尝试新端点之前,不要忘记刷新永久链接!使用wp cli:
wp rewrite flush
或使用管理UI:
http://example.local/wp-admin/options-permalink.php 然后单击保存。