我目前正在尝试更改Woocommerce redirect url 仅当用户从特定页面登录时用于登录。因此,首先我在模板页面中尝试了这种方法:
<?php woocommerce_login_form(array(\'redirect\'=>$_SERVER[\'REQUEST_URI\'])); ?>
然后,我看到用户仍然被重定向到默认值(我的帐户),所以我这样使用了登录挂钩:
function share_login_redirect( $redirect ) {
if( strtr($_SERVER[\'REQUEST_URI\'],array(\'/partage\',\'/share\')) ){
$redirect = get_site_url().$_SERVER[\'REQUEST_URI\'];
}
return $redirect;
}
add_filter( \'woocommerce_login_redirect\', \'share_login_redirect\', 10, 2 );
所有这些技巧对我都不起作用。知道这一点
$redirect = "https://mysite/share/?param=xx" 我做错了什么?
2017年8月29日编辑:如果有人遇到了与我相同的问题,则可能有一个插件使用了与你相同的挂钩,并且具有比你更高的优先级,这意味着除非你提高优先级,否则重定向将无法工作。请看下面我的答案。
最合适的回答,由SO网友:Dynomite 整理而成
我发现我的问题是优先权。其他一些插件使用的是1000优先级,所以我在声明挂钩时必须提高优先级。这样做:
add_filter( \'woocommerce_login_redirect\', \'share_login_redirect\', 1100, 2 );
而不是
add_filter( \'woocommerce_login_redirect\', \'share_login_redirect\', 10, 2 );
SO网友:Jeff Mattson
尝试更改strtr 到strpos. 然而,我认为你不能给它一个针阵列。您必须为此创建另一个函数。
function strposa($haystack, $needles=array(), $offset=0) {
$chr = array();
foreach($needles as $needle) {
$res = strpos($haystack, $needle, $offset);
if ($res !== false) $chr[$needle] = $res;
}
if(empty($chr)) return false;
return min($chr);
}
使用此函数,而不是
strtr