我已经为每个用户的wordpress添加了一些自定义元数据,并希望在登录后根据此自定义元数据重定向每个用户。
例如,我有一个名为foo的页面和另一个名为bar的页面。用户1在元数据中声明foo时具有自定义键(acCustomerName)。而另一个用户则在他的名单中。
根据该字段中的内容,我想将第一个用户重定向到http://example.tld/foo,将另一个用户重定向到http://example.tld/bar。
我能够完全正确地检索这些信息并直接回显它以测试函数,但是无法在名为forward_user的sencond函数中检索该信息并且想知道原因。
现在,用户仅被重定向到http://example.tld。所以看起来这个函数没有得到$ kundtyp字符串。
function kundtyp($Uuser) {
$key = 'acCustomerName';
$single = true;
return get_user_meta( $Uuser, $key, $single );
}
function forward_user( $redirect, $user ) {
$kundtyp = kundtyp($user);
$redirect_page_id = url_to_postid( $redirect );
$checkout_page_id = wc_get_page_id( 'checkout' );
if( $redirect_page_id == $checkout_page_id ) {
return $redirect;
}
return site_url( kundtyp( get_current_user_id() ) );
}
add_filter( 'woocommerce_login_redirect', 'forward_user', 1100, 2 );
答案 0 :(得分:1)
这是更新后的代码,您必须将用户对象的ID传递给get_user_meta数据功能。您正在将WP_User对象传递给您的函数。我认为你不能使用函数get_current_user_id(),因为还没有设置全局wp_user对象。我检查了它,它总是返回0作为值。这可以解释为什么他们在过滤器中提供$ user变量。
function kundtyp($Uuser) {
$key = 'acCustomerName';
$single = true;
return get_user_meta( $Uuser->ID, $key, $single );
}
function forward_user( $redirect, $user ) {
$kundtyp = kundtyp($user);
$redirect_page_id = url_to_postid( $redirect );
$checkout_page_id = wc_get_page_id( 'checkout' );
if( $redirect_page_id == $checkout_page_id ) {
return $redirect;
}
return site_url( kundtyp( $user ) );
}
add_filter( 'woocommerce_login_redirect', 'forward_user', 1100, 2 );