[wp-hackers] array_push on update_user_meta

J.D. Grimes jdg at codesymphony.co
Thu Oct 31 20:52:51 UTC 2013


OK, you need to just delete that meta row and start over. It is messed up from before. Do that and see if it works.

On Oct 31, 2013, at 4:49 PM, Gregory Lancaster <greglancaster71 at gmail.com> wrote:

> I have it set to true:
> 
>  $active_user_friends = get_user_meta($active_user, 'friends', true);
> But the issue is that it only shows the "friended" code for the last user I
> added.  If I click add on one profile, and then to a second, the first no
> longer shows friend added. Even if I have clearly added several to the
> array:
> 
> a:2:{i:0;a:2:{i:0;a:2:{i:0;a:2:{i:0;a:2:{i:0;a:2:{i:0;s:0:"";i:1;s:2:"16";}i:1;s:2:"12";}i:1;s:2:"13";}i:1;s:2:"12";}i:1;s:1:"3";}i:1;s:2:"13";}
> 
> 
> 
> 
> On Thu, Oct 31, 2013 at 1:40 PM, J.D. Grimes <jdg at codesymphony.co> wrote:
> 
>> No, you don’t need to use unserialize, that is all done automatically by
>> the WordPress functions.
>> 
>> In the code you posted you still aren’t calling get_user_meta() with the
>> third parameter set to true. You need to do that. Right now the array it is
>> returning looks something like this:
>> 
>> array(
>>        0 => array( 3, 45, 6, 33 )
>> )
>> 
>> When you call in_array() it is checking if the user ID (say, 3 ) is in the
>> outer array. But it isn’t, the only thing in it is another array. When you
>> call get_user_meta() with the third parameter set to true, the returned
>> value won’t be wrapped in the outer array like that, so it will work.
>> 
>> 
>> On Oct 31, 2013, at 4:30 PM, Gregory Lancaster <greglancaster71 at gmail.com>
>> wrote:
>> 
>>> Ah I see. Thank you for explaining JD.  It sounds like maybe the easier
>>> option is to just create a separate table to store the friends list in.
>>> Trying to work with user_meta this way seems like a bad idea.
>>> 
>>> Quick question, should I be using unserialize to check the array values
>>> using in_array?  Because right now this code isnt working.  Thats the
>> only
>>> thing that seems to be left out - but when I tried using $unserialize
>> like
>>> this:
>>> 
>>> $unserialize = unserialize($active_user_friends);
>>> if (in_array($author_id, $unserialize)) {
>>> 
>>> it says this:
>>> 
>>> 
>>> *Warning*: unserialize() expects parameter 1 to be string, array given
>>> and
>>> *Warning*: in_array() expects parameter 2 to be array, boolean given
>>> 
>>> 
>>> 
>>> 
>>> --------
>>> 
>>> 
>>> 
>>> add_action('wp_ajax_my_add_friend_action', 'my_add_friend_action');
>>> add_action('wp_ajax_nopriv_my_add_friend_action',
>> 'my_add_friend_action');
>>> function my_add_friend_action() {
>>> global $wpdb;
>>> $profileID = $_POST['profileID'];
>>> $userID = $_POST['userID'];
>>> 
>>> $chkMetaValue = get_user_meta($userID,"friends");
>>> if ( ! is_array($chkMetaValue) )
>>> $chkMetaValue = array();
>>> $chkMetaValue[] = $profileID;
>>> 
>>> // activity_tracker($current_user, 'added_friend', 'prof');
>>> update_user_meta( $userID, 'friends', $chkMetaValue );
>>> $response = array( 'success' => true );
>>> wp_send_json_success($response);
>>> 
>>> die();
>>> }
>>> 
>>> 
>>> function friend_status($author_id) {
>>> global $wpdb, $current_user;
>>>     get_currentuserinfo();
>>> 
>>> //authorID is the userID of the profile owner
>>> 
>>> $active_user = $current_user->ID;
>>> $active_user_friends = get_user_meta($active_user, 'friends');
>>> 
>>> if (in_array($author_id, $active_user_friends, true)) {
>>> $friend_status = "<button id='remove_friend'>Remove Friend</button>";
>>> } else {
>>> $friend_status = "<button id='add_friend'>Add Friend</button>";
>>> }
>>> 
>>> return $friend_status;
>>> }
>>> 
>>> 
>>> That is basically the code I am using to insert the users id into their
>>> user_meta table.
>>> 
>>> 
>>> On Thu, Oct 31, 2013 at 1:08 PM, J.D. Grimes <jdg at codesymphony.co>
>> wrote:
>>> 
>>>> There are two ways to use the *_meta functions. The way it looks like
>> you
>>>> are doing it is that each user has a single entry in the usermeta table,
>>>> with the key ‘friends’. The value for this meta key will be stored in
>> the
>>>> database as a serialized array, and when it is pulled out (by
>>>> get_user_meta()) it gets unserialized into a PHP array.
>>>> 
>>>> Alternative is this: Each user has multiple ‘friend’ meta key rows in
>> the
>>>> usermeta table, each one’s meta_value the ID of a single user that the
>> user
>>>> has friended.
>>>> 
>>>> The benefit of the second option is that the values may be easier to
>>>> search. Much easier. But that may not be important to you right now.
>> (But
>>>> then that could change later…) What if you want to show a list of users
>> who
>>>> have friended a user? You will be able to do that easily with this. With
>>>> the first option, it is possible, but more complex and probably harder
>> on
>>>> the DB.
>>>> 
>>>> The downside is that there are many more rows in usermeta table.
>>>> 
>>>> So each of these functions let you target a single row (as in first
>> case)
>>>> or all rows with a key (as in the later case). Whichever way you go, you
>>>> just need to be consistent through all of the code, obviously.
>>>> 
>>>> -J.D.
>>>> 
>>>> On Oct 31, 2013, at 3:30 PM, Gregory Lancaster <
>> greglancaster71 at gmail.com>
>>>> wrote:
>>>> 
>>>>> What would be the benefit of storing the friends in separate rows? I
>> did
>>>>> not know that was an option, but don't see any clear advantages either.
>>>>> Also, I did just search the codex but dont see anything about unique
>>>> rows.
>>>>> (I checked get_user_meta, delete_user_meta, update_user_meta. )
>>>>> 
>>>>> 
>>>>> On Thu, Oct 31, 2013 at 12:24 PM, J.D. Grimes <jdg at codesymphony.co>
>>>> wrote:
>>>>> 
>>>>>> Yes, when you call get_user_meta() you need to set the third parameter
>>>>>> ($single) to true:
>>>>>> 
>>>>>> $active_user_friends = get_user_meta( $active_user, ‘friends’, true );
>>>>>> 
>>>>>> Otherwise it will return a nested array. Also, just FYI, alternatively
>>>> you
>>>>>> could leave the get_user_meta() call the way it is, and change it so
>>>> that
>>>>>> each friend is stored in a separate meta row (but with the same meta
>>>> key -
>>>>>> have a look at the *_user_meta functions on the codex).
>>>>>> 
>>>>>> -J.D.
>>>>>> 
>>>>>> On Oct 31, 2013, at 3:14 PM, Gregory Lancaster <
>>>> greglancaster71 at gmail.com>
>>>>>> wrote:
>>>>>> 
>>>>>>> I thought so.  One more question if you dont mind helping;
>>>>>>> 
>>>>>>> This is the function I wrote to determine what button to show on page
>>>>>> load.
>>>>>>> But regardless if someone has been friended or not, it shows the add
>>>>>>> friend option.  Is something wrong with this?
>>>>>>> 
>>>>>>> 
>>>>>>> function friend_status($author_id) {
>>>>>>> global $wpdb, $current_user;
>>>>>>>   get_currentuserinfo();
>>>>>>> 
>>>>>>> //authorID is the userID of the profile owner
>>>>>>> 
>>>>>>> $active_user = $current_user->ID;
>>>>>>> $active_user_friends = get_user_meta($active_user, 'friends');
>>>>>>> 
>>>>>>> if (in_array($author_id, $active_user_friends)) {
>>>>>>> $friend_status = "<button id='remove_friend'>Remove Friend</button>";
>>>>>>> } else {
>>>>>>> $friend_status = "<button id='add_friend'>Add Friend</button>";
>>>>>>> }
>>>>>>> 
>>>>>>> return $friend_status;
>>>>>>> }
>>>>>>> 
>>>>>>> Then on page:  echo $friend_status;
>>>>>>> 
>>>>>>> 
>>>>>>> On Thu, Oct 31, 2013 at 11:53 AM, J.D. Grimes <jdg at codesymphony.co>
>>>>>> wrote:
>>>>>>> 
>>>>>>>> Yes, I would write a separate function for removal, and hook it to a
>>>>>>>> different AJAX action for removal.
>>>>>>>> 
>>>>>>>> On Oct 31, 2013, at 2:48 PM, Gregory Lancaster <
>>>>>> greglancaster71 at gmail.com>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> That works easier :)  Once someone is friended I have it set so an
>>>>>>>> unfriend
>>>>>>>>> button replaces the add friend button via ajax.  Is it necessary to
>>>>>> write
>>>>>>>>> another function for deleting a person?  Not sure exactly how to
>> make
>>>>>> the
>>>>>>>>> new button function since the data being sent is not attached to
>> the
>>>>>>>> button
>>>>>>>>> in any way.  maybe I could add a value to the button that says
>> remove
>>>>>> or
>>>>>>>>> add, which would be passed to the function and determine what
>> action
>>>> to
>>>>>>>>> take?
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Thu, Oct 31, 2013 at 11:32 AM, J.D. Grimes <jdg at codesymphony.co
>>> 
>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>>> I would do this:
>>>>>>>>>> 
>>>>>>>>>> $profileID = $_POST['profileID'];
>>>>>>>>>> 
>>>>>>>>>> $chkMetaValue = get_user_meta($userID,"friends");
>>>>>>>>>> 
>>>>>>>>>> if ( ! is_array($chkMetaValue) )
>>>>>>>>>>    $chkMetaValue = array();
>>>>>>>>>> 
>>>>>>>>>> $chkMetaValue[] = $profileID; // or use array_push()
>>>>>>>>>> 
>>>>>>>>>> update_user_meta( $userID, 'friends', $chkMetaValue );
>>>>>>>>>> 
>>>>>>>>>> -J.D.
>>>>>>>>>> 
>>>>>>>>>> On Oct 31, 2013, at 1:32 PM, BenderisGreat <
>>>> greglancaster71 at gmail.com
>>>>>>> 
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>>> I am not sure exactly how this would work because I start with an
>>>>>> empty
>>>>>>>>>>> meta_value field.  I dont think I can use array_push if there is
>>>> not
>>>>>> at
>>>>>>>>>>> least one value in the field, correct?
>>>>>>>>>>> 
>>>>>>>>>>> So maybe something like this:
>>>>>>>>>>> 
>>>>>>>>>>> $profileID = $_POST['profileID'];
>>>>>>>>>>> 
>>>>>>>>>>> $chkMetaValue = get_user_meta($userID,"friends");
>>>>>>>>>>>  if (!empty($chkMetaValue))
>>>>>>>>>>>          {
>>>>>>>>>>>          array_push($profileID);
>>>>>>>>>>>          } else {
>>>>>>>>>>>          $profileID;
>>>>>>>>>>>          }
>>>>>>>>>>> 
>>>>>>>>>>> update_user_meta( $userID, 'friends', $chkMetaValue );
>>>>>>>>>>> 
>>>>>>>>>>> Is that right?
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> --
>>>>>>>>>>> View this message in context:
>>>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>> 
>> http://wordpress-hackers.1065353.n5.nabble.com/array-push-on-update-user-meta-tp42688.html
>>>>>>>>>>> Sent from the Wordpress Hackers mailing list archive at
>> Nabble.com.
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> wp-hackers mailing list
>>>>>>>>>>> wp-hackers at lists.automattic.com
>>>>>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>>>>> 
>>>>>>>>>> _______________________________________________
>>>>>>>>>> wp-hackers mailing list
>>>>>>>>>> wp-hackers at lists.automattic.com
>>>>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>>>>> 
>>>>>>>>> _______________________________________________
>>>>>>>>> wp-hackers mailing list
>>>>>>>>> wp-hackers at lists.automattic.com
>>>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>>> 
>>>>>>>> _______________________________________________
>>>>>>>> wp-hackers mailing list
>>>>>>>> wp-hackers at lists.automattic.com
>>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> wp-hackers mailing list
>>>>>>> wp-hackers at lists.automattic.com
>>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>> 
>>>>>> _______________________________________________
>>>>>> wp-hackers mailing list
>>>>>> wp-hackers at lists.automattic.com
>>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>>>> 
>>>>> _______________________________________________
>>>>> wp-hackers mailing list
>>>>> wp-hackers at lists.automattic.com
>>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>> 
>>>> _______________________________________________
>>>> wp-hackers mailing list
>>>> wp-hackers at lists.automattic.com
>>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>>>> 
>>> _______________________________________________
>>> wp-hackers mailing list
>>> wp-hackers at lists.automattic.com
>>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>> 
>> _______________________________________________
>> wp-hackers mailing list
>> wp-hackers at lists.automattic.com
>> http://lists.automattic.com/mailman/listinfo/wp-hackers
>> 
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers



More information about the wp-hackers mailing list