在wordpress的开发中,需要添加url自定义参数传送接收值,同时重写路由规则保证url地址的美观,要用到add_rewrite_rule函数,和init动作和query_vars过滤器。如下代码示例了添加url自定义参数和定义路由规则的方法:


function products_plugin_rules() {
   add_rewrite_rule('products/?([^/]*)', 'index.php?pagename=products&product_id=$matches[1]', 'top');
}

function products_plugin_query_vars($vars) {
   $vars[] = 'product_id';
   return $vars;
}

add_action('init', 'products_plugin_rules');
add_filter('query_vars', 'products_plugin_query_vars');

定义了自定义url参数,我们接收参数的值在wordpress中,不建议直接用$_GET获取,有专门的函数get_query_var,以下代码演示了在wordpress中获取url中参数的值:


function products_plugin_display() {
   $products_page = get_query_var('pagename');
   $product_id = get_query_var('product_id');
   if ('products' == $products_page && '' == $product_id):
    //show all products
    exit;
   elseif ('products' == $products_page && '' != $product_id):
    //show product page
    exit;
   endif;
 }
 
 //register plugin custom pages display
 add_filter('template_redirect', 'products_plugin_display');