【问题标题】:WordPress ReWrite Rule And Matches ProcessingWordPress重写规则和匹配处理
【发布时间】:2016-02-12 22:43:56
【问题描述】:

它是一个 WordPress 查询和另一个 add_rewrite_rule 一个。

我想要的是让用户输入网址和两个客户参数,例如“foods/food”......所以网址是http://wordpress_home/foods/food。 问题是“食物”是一个重定向规则,我想进一步处理“食物”。

    add_rewrite_rule(
        "^foods/([0-9]+)",
        "index.php?page_id=\$matches[1]",
        "top"
    );

在上面的示例中,“食物”位有效。我目前正在检查数字,但我现在想通过将“食物”发送到另一个函数来使用“食物”,通过从“食物”函数获取相关数据来处理它,然后使用返回的数据来完成 URL。 'Food' 可能会返回正确的 'page_id',但需要使用 'food' 调用数据库来获取 'page_id' 以完成 url,以便为正确的用户显示正确的页面。

我无法在上面的重写规则中注入函数。任何人都可以帮忙吗?
我试过checkfood( $matches[1] ),但是失败了。

谢谢。

【问题讨论】:

  • food 的一个参数foods 这样foods/cheeseburger 就是你所追求的吗?
  • 不,它不是参数。它更像'foods/6754' - 所以我的数据库调用将处理'6754'(在$matches [1]中),用来自db调用的内容替换'foods/6754',然后重写整个url。

标签: php regex wordpress


【解决方案1】:

添加另一个参数 &foods=1 以便您可以在 template_redirect 中确定它是否应该执行任何操作。

add_rewrite_rule(
        "^foods/([0-9]+)",
        "index.php?page_id=\$matches[1]&foods=1",
        "top"
    );

add_action('template_redirect', 'fww_template_pretty_permalink_handler');
function fww_template_pretty_permalink_handler() {
    $foodspage = get_query_var('foods');
    if ($foodspage == 1) {
      //do whatever - load a specific template, or set up objects or whatever
      //depends how your code works
    }
}
add_filter( 'query_vars', 'fww_rewrite_add_var' );
function fww_rewrite_add_var( $vars )
{
   $vars[] = 'foods';
   return $vars;
}

注意:如果您使用钩子和操作,则无需添加模板处理程序,因为您只需确保传递 URL 参数即可确定代码何时运行。

您可以检查您的钩子和操作中是否存在 query_var,这些查询变量是不可见的,因为它们被重写隐藏了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 2012-11-21
    • 2023-03-27
    • 2018-02-01
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多