Wordpress:如何在表单 GET 提交后使用 Rewrite 将 URL 变量添加到 URL
Posted
技术标签:
【中文标题】Wordpress:如何在表单 GET 提交后使用 Rewrite 将 URL 变量添加到 URL【英文标题】:Wordpress: How to add URL variables to URL using Rewrite after form GET submit 【发布时间】:2021-10-01 16:29:24 【问题描述】:我的 WordPress 网站上有一个简单的搜索表单,它在用户提交表单后使用 method="get" 将变量添加到我的页面 URL。
表单提交后,页面 URL 如下所示:mydomain.com/for-sale/?category=testcategory&othervariable=xx
我使用以下代码重写了我的 URL 以使其对 SEO 更友好:
function category_query_vars( $query_vars )
$query_vars[] = 'category';
return $query_vars;
add_filter('query_vars', 'category_query_vars');
function add_rewrite_rules($rules)
$newrules = array(
'^for-sale/([^/]*)/?$' => 'index.php?pagename=for-sale/&category=$matches[1]',
);
$rules = $newrules + $rules;
return $rules;
add_filter('rewrite_rules_array', 'add_rewrite_rules');
使用此代码,我可以访问mydomain/for-sale/testcategory
,category
是我可以获得的查询变量。这工作正常。
但是,当用户提交搜索表单(我在其中设置 method='get'
)时,他们会被重定向到 mydomain.com/for-sale/?category=testcategory&othervariable=xx,我想将它们重定向到 mydomain.com/for-sale/testcategory/&othervariable=xx
我怎样才能做到这一点?我是否需要编辑我的add_rewrite_rules()
函数,或者我是否可以检查参数是否已添加到 URL 中然后进行重定向?
【问题讨论】:
【参考方案1】:过去,我通过将我的数据发布到构建 URL 并重定向用户的服务器来实现类似的目标。例如:
前端表单:
<form action="<?= admin_url( 'admin-post.php' ); ?>" method="post">
<input type="hidden" name="action" value="search-redirector">
<select name="category">
<option value="testcategory">Test Category</option>
<option value="anothercategory">Another Category</option>
</select>
<input type="text" name="othervariable">
</form>
后端重定向处理程序:
search_redirect_handler()
$payload = $_POST;
// Remove WordPress action field.
unset( $payload[ 'action' ] );
// Get category value.
$category = !empty( $payload[ 'category' ] ) ? sanitize_text_field( $payload[ 'category' ] ) : null;
// Base URL.
$url = home_url( '/for-sale/' );
// Add category to the URL structure.
if ( $category )
$url = rtrim( $url, '/' ) . '/' . $category;
unset( $payload[ 'category' ] );
// Add remaining fields as query strings.
$url = add_query_arg( $payload, $url );
// Send headers.
status_header( 301 );
wp_safe_redirect( $url );
exit;
add_action( 'admin_post_search-redirector', 'search_redirect_handler' );
add_action( 'admin_post_nopriv_search-redirector', 'search_redirect_handler' );
请注意,action
字段值与操作名称匹配。有关这方面的更多信息,请参阅此处的文档:
【讨论】:
嗨,非常感谢您的精彩文章。我试过你的代码,提交表单后,类别变量设置正确(我可以使用get_query_var('category')
),但URL没有更新,其他变量也没有设置。我还注意到您的代码中有一个小错误;我假设最后几行需要wp_safe_redirect( $url )
而不是wp_safe_redirect( $redirect )
,但是,更新后仍然无法正常工作。仍在尝试弄清楚我还需要更改哪些内容才能使其正常工作..
哈,我成功了!表单操作 URL 需要 echo
:-) 现在您的代码运行良好! (最后几行中的小 $url 编辑)。非常感谢!以上是关于Wordpress:如何在表单 GET 提交后使用 Rewrite 将 URL 变量添加到 URL的主要内容,如果未能解决你的问题,请参考以下文章