我在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 然后单击保存。