使用自定义域和搜索结果的WP用户查询

时间:2017-04-18 作者:Faye

我正在尝试运行一个搜索,对附加了高级自定义字段的用户配置文件进行排序。我正在使用WP用户查询。我搜索的一个字段是repeater字段(business\\u information)及其子字段(business\\u name)。

我正在使用提供的信息ACF documentation page, #4 Sub Custom Field Values

因此,对于我的变量,它如下所示:

    function my_posts_where( $where ) {

        $where = str_replace("meta_key = \'business_information_%", "meta_key LIKE \'business_information_%", $where);

        return $where;
    }

    add_filter(\'posts_where\', \'my_posts_where\');

    if( !empty( $_GET[\'usersearch\'] ) ){
        $usersearch = stripslashes( trim($_GET[\'usersearch\']) );
        // WP_User_Query arguments
        $args = array(
            \'role\'           => \'Subscriber\',
            \'meta_query\'     => array(
                array(
                        \'key\'     => \'membership_class\',
                        \'value\'   => \'Full\',
                        \'compare\' => \'=\',
                        \'type\'    => \'CHAR\',
                    ),
                array(
                    \'relation\' => \'OR\',
                    array(
                        \'key\'     => \'first_name\',
                        \'value\'   => $usersearch,
                        \'compare\' => \'LIKE\'
                    ),
                    array(
                        \'key\'     => \'last_name\',
                        \'value\'   => $usersearch,
                        \'compare\' => \'LIKE\'
                    ),
                    array(
                        \'key\'     => \'personal_city\',
                        \'value\'   => $usersearch,
                        \'compare\' => \'LIKE\',
                        \'type\'    => \'CHAR\',
                    ),
                    array(
                        \'key\'     => \'personal_province\',
                        \'value\'   => $usersearch,
                        \'compare\' => \'LIKE\',
                        \'type\'    => \'CHAR\',
                    ),
                    array(
                        \'key\'       => \'treatments\',
                        \'value\'     => $usersearch,
                        \'compare\'   => \'LIKE\',

                    ),
                    array(
                        \'key\'       => \'business_information_%_business_name\',
                        \'value\'     => $usersearch,
                        \'compare\'   => \'LIKE\',

                    ),


                ),

            ),
        );
请求输出:

SELECT DISTINCT SQL_CALC_FOUND_ROWS wp_users.* FROM wp_users INNER JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id )  INNER JOIN wp_usermeta AS mt1 ON ( wp_users.ID = mt1.user_id )  INNER JOIN wp_usermeta AS mt2 ON ( wp_users.ID = mt2.user_id ) WHERE 1=1 AND ( 
  ( 
    ( 
      ( wp_usermeta.meta_key = \'membership_class\' AND wp_usermeta.meta_value = \'Full\' ) 
      AND 
      ( 
        ( mt1.meta_key = \'first_name\' AND mt1.meta_value LIKE \'%name%\' ) 
        OR 
        ( mt1.meta_key = \'last_name\' AND mt1.meta_value LIKE \'%name%\' ) 
        OR 
        ( mt1.meta_key = \'personal_city\' AND mt1.meta_value LIKE \'%name%\' ) 
        OR 
        ( mt1.meta_key = \'personal_province\' AND mt1.meta_value LIKE \'%name%\' ) 
        OR 
        ( mt1.meta_key = \'treatments\' AND mt1.meta_value LIKE \'%name%\' ) 
        OR 
        ( mt1.meta_key = \'business_information_%_business_name\' AND mt1.meta_value LIKE \'%name%\' )
      )
    ) 
    AND 
    ( 
      ( 
        ( mt2.meta_key = \'wp_capabilities\' AND mt2.meta_value LIKE \'%\\"Subscriber\\"%\' )
      )
    )
  )
) ORDER BY user_login ASC 
现在,我要第一个承认我不知道自己到底在做什么,但其余的搜索都完全按照我的意愿进行。只是business repeater字段没有正确进入搜索查询。据我所知,上述函数应该替换db请求的那一部分,但它没有这样做,我不知道为什么或者如何使其工作,或者它最终应该是什么样子。我一直在谷歌上搜索这个问题,只是找不到答案。一切似乎都与帖子有关,而不是与用户有关,我想知道这是不是我的问题?有人知道有什么可以帮助的吗?

1 个回复
SO网友:elmediano

不知道你是否找到了答案,但以防万一,我只是找到了:)

有一个钩子我(终于!)发现它可以让您这样做,并以类似的方式工作posts_where. 钩子是pre_user_query. 下面是一个关于法典的例子:https://developer.wordpress.org/reference/hooks/pre_user_query/#user-contributed-notes

通过以上步骤,您的函数现在可以如下所示:

function user_posts_where( $user_query ) {

    $user_query->query_where = str_replace("meta_key = \'business_information_$", "meta_key LIKE \'business_information_%", $user_query->query_where);

    return $user_query;

}

add_filter(\'pre_user_query\', \'user_posts_where\');
请注意,ACF现在建议使用美元符号作为通配符,因此business_information_$.

您还需要更改meta_query 到下面,使用business_information_$_business_name 而是:

array(
    \'key\'       => \'business_information_$_business_name\',
    \'value\'     => $usersearch,
    \'compare\'   => \'LIKE\'
)

相关推荐

Insert Data into Database

我是为wordpress开发插件的新手。我需要一个公式,所有的网站浏览者可以填写数据并发送它。这个send it-按钮应将其保存到数据库。因此,我认为应该这样定义插件中的快捷方式和公式:function formular() { return \'This is html of Formular\'; } add_shortcode(\"formular\", \"formular\"); 但是现在我不知道如何用按钮定义公式来将数据保存到数据库中。已添加应保存数据的数