如何使用“重写”规则接受自定义GET变量


How to accept the custom GET variable with Rewrite rule

在自定义post_type中,我使用永久链接。。。我将在ask循环中通过$_GET变量进行自定义查询。

例如

  • www.(domain).com/ask?dates=today
  • www.(domain).com/ask?rating=5

简单查询是:

<?php 
 $args = array(
            'post_type' => 'ask',
             ...,
             ...,
            'meta_key' => 'rating',
            'meta_value' => $_GET['rating']
       );
 $the_query = new WP_Query( $args );

1

我如何在404错误中拯救www.(domain).com/ask/rating/5!并假装www.(domain).com/ask/

2

我是如何在这个链接中得到这个子变量进行自定义查询的?

要匹配两个参数,请尝试以下操作:

<IfModule mod_rewrite.c>
    RewriteRule ^ask/([a-z]+)?/(.+)?$   ask/?$1=$2    [NC]
</IfModule>

应将/ask/rating/5重写为/ask/?rating=5

如果你需要匹配更多,你可以将其扩展到包括四个:

<IfModule mod_rewrite.c>
    RewriteRule ^ask/([a-z]+)?/([a-zA-Z0-9]+)?$ ask/?$1=$2    [NC] #matches two variables
    RewriteRule ^ask/([a-z]+)?/([a-zA-Z0-9]+)?/([a-z]+)?/([a-zA-Z0-9]+)?$   ask/?$1=$2&$2=$3    [NC] #matches four variables
</IfModule>

这可以根据需要扩展

要将它们放入您的查询中,您正在做正确的事情,使用$_GET["],也许可以尝试

<?php
$args = array('post_type' => 'ask');
foreach (['rating', 'dates'] as $param){
    $args[$param] = $_GET[$param];
}

这将产生

$args = array(
    'post_type' => 'ask',
    'rating' => 5,
    'dates' => 'today'
);

这是我能做的最好的事情,因为你不能有两个匹配的密钥