对每个用户ID唯一的自定义字段进行SELECT WHERE查询

时间:2018-11-21 21:45:08

标签: php wordpress select

我正在使用MemberMouse for Wordpress处理重复出现的订阅,我需要添加一个成员目录(MemberMouse不提供此功能),该目录向MemberMouse查询信息。 MemberMouse注册表单上的大约十二个字段是自定义字段,文本和下拉菜单的混合以及一个复选框,使用户可以决定是否要显示在目录中。

我的PHP知识是有限的,但是到目前为止,我已经写了一个小测试项目,只是为了确保可以从MemberMouse自定义字段返回结果,并且到目前为止,我已经做到了:

    global $wpdb;
    $args = array(
        'role'    => 'paid-member',
        'orderby' => 'user_nicename',
        'order'   => 'DSC'
    );
    $users = get_users( $args );

    echo '<ul>';
    foreach ( $users as $user ) {  

    $is_in_database = $wpdb->get_var( "SELECT value FROM mm_custom_field_data WHERE custom_field_id = '1' " );

    echo '<li>' . esc_html( $user->display_name ) . ' [' . esc_html( $user->user_email ) . ']</li>';

    echo 'Custom Field Data: '.$is_in_database.' </br></br>';

    }
    echo '</ul>';

这种工作方式,它列出了成员名称和电子邮件,但是在从自定义字段中提取数据的地方,它显示了所有用户在数据库中的第一个值,而不是每个用户在此字段中的唯一值用户。如何使其分别检查每个USER ID并获取该用户的自定义值?

我要为每个人添加大约8个左右的“ SELECT”查询。

谢谢

1 个答案:

答案 0 :(得分:0)

您始终使用以下方式获取相同的数据:

$is_in_database = $wpdb->get_var( "SELECT value FROM mm_custom_field_data WHERE custom_field_id = '1' " );

如果要基于显示的用户返回自定义字段数据,则需要执行SELECT,并按用户ID进行过滤。这样的事情应该可以解决问题:

$is_in_database = $wpdb->get_var($wpdb->prepare(
    "
        SELECT value
        FROM mm_custom_field_data
        WHERE user_id = %d
    ",
    $user->ID
));

我不知道mm_custom_field_data的表结构,但是我想包含用户ID的列是user_id。为了安全起见,您应该检查一下。