代码之家  ›  专栏  ›  技术社区  ›  hrdy

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

  •  0
  • hrdy  · 技术社区  · 7 年前

    我已经为每个用户向wordpress添加了一些自定义元数据,并希望在每个用户登录后根据此自定义元数据重定向。

    例如,我有一个名为foo的页面和另一个名为bar的页面。User one在元数据中有一个自定义键(acustomername),声明foo。而另一个用户在他的中有bar。

    根据该字段中的内容,我希望将第一个用户重定向到 http://example.tld/foo 另一个是 http://example.tld/bar

    我能够很好地检索此信息,并直接将其回传出来以测试函数,但无法在名为forward\u user的第二个函数中检索该信息,我想知道原因。

    现在,用户只重定向到 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 回复  |  直到 7 年前
        1
  •  1
  •   Andrew Schultz    7 年前

    这是更新后的代码,您必须传递用户对象的ID才能获得\u user\u元数据函数。您正在将WP\u用户对象传递给函数。我认为您不能使用函数get\u current\u user\u id(),因为全局wp\u 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 );