OK, we are definitely getting closer. Using the switch_to_blog() function was definitely a missing piece in my solution, and I am now able to get values. However, s2member_paid_registration_time() is still not behaving as explained in the API. Here is my current example:
I have a PHP page coded as follows:
<html>
<body>
<?php
include "../wp-load.php";
switch_to_blog(4);
$user_id = (integer)$_GET['user_id'];
$blog_id = (integer)$_GET['blog_id'];
$user = new WP_User($user_id);
echo '$user_id : ' . $user_id . '<br>';
echo 's2member_registration_time($user_id): ' . s2member_registration_time($user_id) . '<br>';
echo 'Paid Registration Times from MySQL: ';
$s2member_paid_registration_times = get_user_option('s2member_paid_registration_times', $user_id);
print_r($s2member_paid_registration_times);
echo '<br>';
echo 's2member_paid_registration_time(): ' . s2member_paid_registration_time() . '<br>';
echo 's2member_paid_registration_time(\'level\',$user_id): ' . s2member_paid_registration_time('level',$user_id) . '<br>';
echo 's2member_paid_registration_time(\'level1\',$user_id): ' . s2member_paid_registration_time('level1',$user_id) . '<br>';
echo 's2member_paid_registration_time(\'level2\',$user_id): ' . s2member_paid_registration_time('level2',$user_id) . '<br>';
echo 's2member_paid_registration_time(\'level3\',$user_id): ' . s2member_paid_registration_time('level3',$user_id) . '<br>';
echo 's2member_paid_registration_time(\'level4\',$user_id): ' . s2member_paid_registration_time('level4',$user_id) . '<br>';
?>
</body>
</html>
I call it from a web browser via the following URL:
http://edutainmentlive.com/dpcustom/cancelation.php?user_id=18&subscr_id=18103761&blog_id=4
The page returns the folllowing:
$user_id : 18
s2member_registration_time($user_id): 1377574405
Paid Registration Times from MySQL: Array ( [level] => 1377574406 [level2] => 1377574406 )
s2member_paid_registration_time(): 0
s2member_paid_registration_time('level',$user_id): 1377574406
s2member_paid_registration_time('level1',$user_id): 1377574406
s2member_paid_registration_time('level2',$user_id): 1377574406
s2member_paid_registration_time('level3',$user_id): 1377574406
s2member_paid_registration_time('level4',$user_id): 1377574406
This user has only purchased one membership in their lifetime and it was a level 2 membership. The array reflects that as expected. However, the output from s2member_paid_registration_time() reflects something different. It shows that level 1, 3 and 4 memberships were also purchased. It also shows a 0 value when querying for the “first” paid membership (which is the value I want to use in the hook I am writing). The API documentation says that it should behave as follows:
<?php
$time = s2member_registration_time (); # first registration time (free or otherwise).
$time = s2member_paid_registration_time (); # first "paid" registration and/or upgrade time.
$time = s2member_paid_registration_time ("level1"); # first "paid" registration or upgrade time at Level#1.
$time = s2member_paid_registration_time ("level2"); # first "paid" registration or upgrade time at Level#2.
$time = s2member_paid_registration_time ("level3"); # first "paid" registration or upgrade time at Level#3.
$time = s2member_paid_registration_time ("level4"); # first "paid" registration or upgrade time at Level#4.
?>
So if I am reading that correctly, instead of what I got above, my page should be returning this:
$user_id : 18
s2member_registration_time($user_id): 1377574405
Paid Registration Times from MySQL: Array ( [level] => 1377574406 [level2] => 1377574406 )
s2member_paid_registration_time(): 1377574406
s2member_paid_registration_time('level',$user_id): 1377574406
s2member_paid_registration_time('level1',$user_id): 0
s2member_paid_registration_time('level2',$user_id): 1377574406
s2member_paid_registration_time('level3',$user_id): 0
s2member_paid_registration_time('level4',$user_id): 0
Do you or Jason have any ideas as to why I am getting the errant results? I’m not too concerned about the individual levels, but my primary goal is that I need a way to query how long it has been since a user paid for their first subscription, regardless of what level it was. Calling s2member_paid_registration_time() without any arguments is supposed to return that, but I am getting 0. Calling s2member_paid_registration_time(‘level’,$user_id) seems to return the value I want, but it is undocumented in the API and I want to make sure I am writing code that will survive future updates.
Thanks again,
Don