繁体   English   中英

来自Wordpress $ wpdb-> get_results数组的自定义JSON数组

[英]Custom JSON array from Wordpress $wpdb->get_results array

目前,我有一个对象的JSON数组,如下所示:

{
    "userid" : "3",
    "name" : "UP DISPLAYNAME",
    "usermeta" : {
        "nickname" : "UP"
    }
}, {
    "userid" : "3",
    "name" : "UP DISPLAYNAME",
    "usermeta" : {
        "first_name" : "Nicky"
    }
}, {
    "userid" : "3",
    "name" : "UP DISPLAYNAME",
    "usermeta" : {
        "last_name" : "PH"
    }
}

}

如您所见,它多次循环同一用户,这是不理想的。 我想要的是输出如下所示:

“ userid”:3,“ name”:THENAMEOFUSER,“ usermeta”:{“ nickname”:“ UP”,“ first_name”:“ Nicky”“ last_name”:“ PH”}

但是我对如何做到这一点有些困惑-目前我得到的是以下内容:

// select only columns you need
$sql = "SELECT wptest_users.ID, wptest_users.display_name, wptest_pmpro_memberships_users.user_id, wptest_usermeta.user_id, wptest_usermeta.meta_key, wptest_usermeta.meta_value FROM wptest_users, wptest_pmpro_memberships_users, wptest_usermeta WHERE wptest_pmpro_memberships_users.membership_id = 1 AND wptest_pmpro_memberships_users.status = 'active' AND wptest_pmpro_memberships_users.user_id = wptest_users.ID AND wptest_usermeta.user_id = wptest_users.ID";

$count = 0; // this is for $preJSON[] index

foreach( $wpdb->get_results( $sql ) as $key => $row ) {

    // each column in your row will now be accessible like this: 
    // $my_column = $row->column_name;
    // now we can do:

    $userid = $row->ID;
    $displayname = $row->display_name;
    $user_meta = $row->meta_value;
    $metadata = array(
        $row->meta_key => $user_meta
    );

    // now we can build a row of this information in our master array
    $preJSON[$count] = array(
        "userid" => $userid,
        "name" => $displayname,
        "usermeta" => $metadata
    );

    // increment the index
    ++$count;
}

// after foreach
// send the whole array to json
return wp_send_json( $preJSON );

一些东西:

1)不必使用* _usermeta表进行其他联接,因为WP具有功能(例如get_userdata),可以直接在盒子中为您处理。 我自由将其从QUERY中删除

2)我已注释掉您的代码,但应该足够接近:

<?php

// select only columns you need
$sql = $wpdb->prepare("SELECT
      wptest_users.ID,
      wptest_users.display_name,
      wptest_pmpro_memberships_users.user_id,

      FROM
      wptest_users,
      wptest_pmpro_memberships_users,
     WHERE
      wptest_pmpro_memberships_users.membership_id = 1
      AND wptest_pmpro_memberships_users.status = 'active'
      AND wptest_pmpro_memberships_users.user_id = wptest_users.ID");


$count = 0; // this is for $preJSON[] index
$user_object = array();
foreach( $wpdb->get_results( $sql ) as $key => $row ) {
  // "userid" : 3, "name" : THENAMEOFUSER, "usermeta": { "nickname" : "UP", "first_name" : "Nicky" "last_name" : "PH" }
    // each column in your row will now be accessible like this:
    // $my_column = $row->column_name;
    // now we can do:

    $userid = $row->ID;
    // $displayname = $row->display_name;
    // $user_meta = $row->meta_value;
    // $metadata = array(
    //     $row->meta_key => $user_meta
    // );
    $user_info = get_userdata($userid);
    $firstname = $user_info->first_name;
    $lastname = $user_info->last_name;
    $display_name = $user_info->display_name;


    // now we can build a row of this information in our master array
    // $preJSON[$count] = array(
    //     "userid" => $userid,
    //     // "name" => $displayname,
    //     // "usermeta" => $metadata
    // );

    $user_object[$count]= array(
        "userid"=>$userid,
        "name"=>$display_name,
        "usermeta"=>array(
          "nickname" : $display_name,
          "first_name" : $firstname,
          "last_name" : $lastname
        )
      );

    // increment the index
    ++$count;
}

// after foreach
// send the whole array to json
return wp_send_json( $user_object );
?>

注意:对于昵称,我使用$ display_name,但如果还有其他含义,则可以根据需要调整变量!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM