[wp-hackers] array_push on update_user_meta

Gregory Lancaster greglancaster71 at gmail.com
Thu Oct 31 21:20:47 UTC 2013


Sorry for the naming by the way.  I decided after I did the first part,
that rather than a friending system it would be used to follow another
users activity.


On Thu, Oct 31, 2013 at 2:18 PM, Gregory Lancaster <
greglancaster71 at gmail.com> wrote:

> Sure;
>
> 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 follow_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', true);
>
>   if (in_array($author_id, $active_user_friends)) {
>   $follow_status = "<button id='remove_friend'>Remove Friend</button>";
>   } else {
>   $follow_status = "<button id='add_friend'>Add Friend</button>";
>   }
>
>  return $follow_status;
> }
>
> and calling in the profile page with:
>
>  echo follow_status($author_id);
>
>
>
> On Thu, Oct 31, 2013 at 2:16 PM, J.D. Grimes <jdg at codesymphony.co> wrote:
>
>> Could you post your code again? Somewhere you are still getting the value
>> wrapped in an extra array.
>>
>>
>> On Oct 31, 2013, at 5:08 PM, Gregory Lancaster <greglancaster71 at gmail.com>
>> wrote:
>>
>> > No I must have screwed something up man, it only shows the last value.
>>  I
>> > searched for awhile before responding here, and I see some people say
>> > in_array adds a line between items and sometimes other folks needed to
>> > strip those.  But I have no idea if thats whats going on here.  It all
>> > looks like it should function.  :-/  Maybe I need to get off the
>> computer
>> > for awhile.
>> >
>> > I var_dump using the function you shared, and this is what the friend
>> array
>> > looks like from there:
>> >
>> > array(2) {\n  [0]=>\n  array(2) {\n    [0]=>\n    array(2) {\n
>>  [0]=>\n
>> >     array(2) {\n        [0]=>\n        array(2) {\n          [0]=>\n
>> >   array(1) {\n            [0]=>\n            string(1) "1"\n
>>  }\n
>> >         [1]=>\n          string(1) "9"\n        }\n        [1]=>\n
>> > string(2) "13"\n      }\n      [1]=>\n      string(2) "16"\n    }\n
>> > [1]=>\n    string(2) "13"\n  }\n  [1]=>\n  string(1) "3"\n}\n
>> >
>> > I dont know if that assists in debugging.
>> >
>> >
>> >
>> > On Thu, Oct 31, 2013 at 1:52 PM, J.D. Grimes <jdg at codesymphony.co>
>> wrote:
>> >
>> >> 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
>> >>
>> >> _______________________________________________
>> >> 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