根据自定义元数据,wordpress / woocommerce重定向用户

时间:2018-04-16 10:59:57

标签: wordpress woocommerce

我已经为每个用户的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 );

1 个答案:

答案 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 );