Get woocommerce user active memberships - extract data from php multi array - php

array (
0 =>
WC_Memberships_User_Membership::__set_state(array(
'id' => 52330,
'plan_id' => 18952,
'plan' =>
WC_Memberships_Membership_Plan::__set_state(array(
'id' => 18952,
'name' => 'Level 2 Access Until June',
'slug' => 'level-2-access-until-june',
'post' =>
WP_Post::__set_state(array(
'ID' => 18952,
'post_author' => '8',
'post_date' => '2017-09-11 11:05:13',
'post_date_gmt' => '2017-09-11 15:05:13',
)),
'access_method_meta' => '_access_method',
'rules' =>
array (
),
)),
'user_id' => '5213',
'status' => 'wcm-active',
'post' =>
WP_Post::__set_state(array(
'ID' => 52330,
'post_title' => 'Auto Draft',
)),
'product' => NULL,
'renewal_login_token_meta' => '_renewal_login_token',
'locked_meta' => '_locked',
)),
1 =>
WC_Memberships_User_Membership::__set_state(array(
'id' => 28639,
'plan_id' => 27786,
'plan' =>
WC_Memberships_Membership_Plan::__set_state(array(
'id' => 27786,
'name' => 'Level 1 – Ethical and Professional Standards',
'slug' => 'level-1-ethical-and-professional-standards',
'post' =>
WP_Post::__set_state(array(
'ID' => 27786,
'post_author' => '8',
'post_mime_type' => '',
'comment_count' => '0',
'filter' => 'raw',
)),
'access_method_meta' => '_access_method',
'email_content_meta' => '_email_content',
'rules' =>
array (
),
)),
'user_id' => '5213',
'status' => 'wcm-active',
'post' =>
WP_Post::__set_state(array(
'ID' => 28639,
'post_author' => '5213',
'post_date' => '2017-11-27 21:41:06',
'filter' => 'raw',
)),
'product' => NULL,
'type' => 'manually-assigned',
'locked_meta' => '_locked',
)),
);
I have this array given by woocommerce method: wc_memberships_get_user_active_memberships($user_id);
I need to extract out the name of the memberships the user has, it must be in a loop as the user can have multiple memberships. I am looking to get back name = Level 2 Access Until June, Level 1 – Ethical and Professional Standards

From what you've posted, I would try this:
$memberships_info = wc_memberships_get_user_active_memberships($user_id);
foreach ($memberships_info as $membership) {
echo $membership['plan']['name'];
}
From the woocommerce docs, it looks like you can specify what status of active memberships. So you might want to do that to include all membership types:
$args = array(
'status' => array( 'active', 'complimentary', 'pending' ),
);
$memberships_info = wc_memberships_get_user_active_memberships($user_id, $args); // adding the args bit to get all memberships
foreach ($memberships_info as $membership) {
echo $membership['plan']['name'];
}
Woocommerce docs: https://docs.woocommerce.com/document/woocommerce-memberships-function-reference/

This is what finally worked for me.
$user_id = get_current_user_id();
$memberships = wc_memberships_get_user_active_memberships($user_id);
foreach ($memberships as $membership => $val) {
echo $val->plan->name . '<br>';
};

Related

return values of specific array key

I read some question and I didn't solve my problem I was use array_column() but I am confused of this silly problem
I have an array $product
$product = array(
0 => array(
'id' => '123',
'name' => 'Facebook status robot',
'description'=> 'Post your wall in your given time',
'quantity' => '1',
'unitPrice' => '120',
'taxable' => 'true'
),
1 => array(
'id' => '123',
'name' => 'Facebook status robot',
'description'=> 'Post your wall in your given time',
'quantity' => '1',
'unitPrice' => '120',
'taxable' => 'true'
),
2 => array(
'id' => '123',
'name' => 'Facebook status robot',
'description'=> 'Post your wall in your given time',
'quantity' => '1',
'unitPrice' => '120',
'taxable' => 'true'
)
);
Now I want remove two elements unitPrice and description
$customProduct = array(
0 => array(
'id' => '123',
'name' => 'Facebook status robot',
'quantity' => '1',
'taxable' => 'true'
),
1 => array(
'id' => '123',
'name' => 'Facebook status robot',
'quantity' => '1',
'taxable' => 'true'
),
2 => array(
'id' => '123',
'name' => 'Facebook status robot',
'quantity' => '1',
'taxable' => 'true'
)
);
The PHP command you need is unset(array[key]), you can access individual indexes in your array by iterating over it.
The basic solution would look like the following. Please be aware that this would modify your original array. If that is not what you want assign the product array to another variable first (2nd example below):
foreach($product as &$data) {
unset($data['unitPrice']);
unset($data['description']);
}
var_dump($product);
would become:
$customProduct = $product;
foreach($customProduct as &$data) {
unset($data['unitPrice']);
unset($data['description']);
}
var_dump($customProduct);
// $product will have its original value.
foreach($product as $key => $prod) {
unset($product[$key]['unitPrice']);
unset($product[$key]['description']);
}
The functional approach, as counterbalance to all the other options:
$customProduct = array_map(function (array $product) {
return array_diff_key($product, array_flip(['unitPrice', 'description']));
}, $product);
$customProduct=array();
foreach($product as $p){
if(isset($p['description'])){
unset($p['description']);
}
if(isset($p['unitPrice'])){
unset($p['unitPrice']);
}
array_push($customProduct,$p);
}
Try my updated answer
foreach($product as &$products) {
unset($products['unitPrice']);
unset($products['description']);
}
print_r($product);
output
Array
(
[0] => Array
(
[id] => 123
[name] => Facebook status robot
[quantity] => 1
[taxable] => true
)
[1] => Array
(
[id] => 123
[name] => Facebook status robot
[quantity] => 1
[taxable] => true
)
[2] => Array
(
[id] => 123
[name] => Facebook status robot
[quantity] => 1
[taxable] => true
)
)
Just run a loop .use the code below
<?php
$product = array(
0 => array(
'id' => '123',
'name' => 'Facebook status robot',
'description'=> 'Post your wall in your given time',
'quantity' => '1',
'unitPrice' => '120',
'taxable' => 'true'
),
1 => array(
'id' => '123',
'name' => 'Facebook status robot',
'description'=> 'Post your wall in your given time',
'quantity' => '1',
'unitPrice' => '120',
'taxable' => 'true'
),
2 => array(
'id' => '123',
'name' => 'Facebook status robot',
'description'=> 'Post your wall in your given time',
'quantity' => '1',
'unitPrice' => '120',
'taxable' => 'true'
)
);
$p= count($product);
for($i=0;$i<=$p;$i++){
unset($product[$i]["description"]);
unset($product[$i]["unitPrice"]);
}
print_r($product);
Hope this helps you

Tell PayPal to automatically process the monthly payment

ref: https://stackoverflow.com/a/25730860/2735734
How to Tell PayPal to automatically process the monthly payment?
UPDATE 1
here is the PayPal Reponses:
CreateAgreement result:
array (
'name' => 'my name',
'description' => 'my description',
'plan' =>
array (
'id' => 'P-95307423V8719480UI4T4SGG',
'state' => 'ACTIVE',
'name' => 'title here',
'description' => 'description here',
'type' => 'INFINITE',
'payment_definitions' =>
array (
0 =>
array (
'id' => 'PD-140035022V340531AI4T4SGG',
'name' => 'Regular Payments',
'type' => 'REGULAR',
'frequency' => 'Month',
'amount' =>
array (
'currency' => 'USD',
'value' => '15.5',
),
'cycles' => '0',
'charge_models' =>
array (
0 =>
array (
'id' => 'CHM-9G272533RU378412KI4T4SGG',
'type' => 'TAX',
'amount' =>
array (
'currency' => 'USD',
'value' => '1',
),
),
),
'frequency_interval' => '1',
),
),
'merchant_preferences' =>
array (
'setup_fee' =>
array (
'currency' => 'USD',
'value' => '0',
),
'max_fail_attempts' => '0',
'return_url' => 'http://example.com/ok',
'cancel_url' => 'http://example.com/cancel',
'auto_bill_amount' => 'YES',
'initial_fail_amount_action' => 'CONTINUE',
),
),
'links' =>
array (
0 =>
array (
'href' => 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-4N736816FP8632455',
'rel' => 'approval_url',
'method' => 'REDIRECT',
),
1 =>
array (
'href' => 'https://api.sandbox.paypal.com/v1/payments/billing-agreements/EC-4N736816FP8632455/agreement-execute',
'rel' => 'execute',
'method' => 'POST',
),
),
'start_date' => '2014-10-25T11:54:20-00:00',
)
AND after the client approved.
ExecuteAgreement result:
array (
'id' => 'I-CD3VD66KJKXX',
'state' => 'Active',
'description' => 'my description',
'plan' =>
array (
'payment_definitions' =>
array (
0 =>
array (
'type' => 'REGULAR',
'frequency' => 'Month',
'amount' =>
array (
'currency' => 'USD',
'value' => '15.50',
),
'cycles' => '0',
'charge_models' =>
array (
0 =>
array (
'type' => 'TAX',
'amount' =>
array (
'currency' => 'USD',
'value' => '1.00',
),
),
1 =>
array (
'type' => 'SHIPPING',
'amount' =>
array (
'currency' => 'USD',
'value' => '0.00',
),
),
),
'frequency_interval' => '1',
),
),
'merchant_preferences' =>
array (
'setup_fee' =>
array (
'currency' => 'USD',
'value' => '0.00',
),
'max_fail_attempts' => '0',
'auto_bill_amount' => 'YES',
),
),
'links' =>
array (
0 =>
array (
'href' => 'https://api.sandbox.paypal.com/v1/payments/billing-agreements/I-CD3VD66KJKXX/suspend',
'rel' => 'suspend',
'method' => 'POST',
),
1 =>
array (
'href' => 'https://api.sandbox.paypal.com/v1/payments/billing-agreements/I-CD3VD66KJKXX/re-activate',
'rel' => 're_activate',
'method' => 'POST',
),
2 =>
array (
'href' => 'https://api.sandbox.paypal.com/v1/payments/billing-agreements/I-CD3VD66KJKXX/cancel',
'rel' => 'cancel',
'method' => 'POST',
),
3 =>
array (
'href' => 'https://api.sandbox.paypal.com/v1/payments/billing-agreements/I-CD3VD66KJKXX/bill-balance',
'rel' => 'self',
'method' => 'POST',
),
4 =>
array (
'href' => 'https://api.sandbox.paypal.com/v1/payments/billing-agreements/I-CD3VD66KJKXX/set-balance',
'rel' => 'self',
'method' => 'POST',
),
),
'start_date' => '2014-10-25T07:00:00Z',
'agreement_details' =>
array (
'outstanding_balance' =>
array (
'currency' => 'USD',
'value' => '0.00',
),
'cycles_remaining' => '0',
'cycles_completed' => '0',
'next_billing_date' => '2014-10-25T10:00:00Z',
'final_payment_date' => '1970-01-01T00:00:00Z',
'failed_payment_count' => '0',
),
)
note the start_date for the first reponse to the second...
The first payement isn't made... (And I don't know for the other, I've try today with a daily payement... I have to wait now...)
In the Pre-Approved area on the Sandbox Account, is in Active and inform about next billing correctly.
Once the user completes and submits subscription purchase page you have created, the subscription will begin and will automatically rebill the customer's account on whatever interval you have selected. You do not have to do anything.
Updated: The REST API also automatically processes subscriptions. You do not have to resubmit monthly. The PayPal sandbox was updated in July of this year to enable you to test and process subscriptions. There are no issues being reported in the dev community about this not working, so I suspect it is something on your side.
If you haven't already. please review this:
https://developer.paypal.com/docs/integration/direct/test-the-api/
There are billing plan and billing subscription sections. If you still have a problem, post your billing plan code and the response you are receiving.

Order multidimentional array with cakephp find all

I have Story related to a Chapter with a many to many relation
I have a StoryChapter Model .
I have this find all stories result :
array(
(int) 0 => array(
'Story' => array(
'id' => '111',
'title' => 'First Story',
'question' => 'What do you want ?',
'description' => 'ezrsrfgq ergtqergq',
'date' => '2014-06-10',
'image' => '/uploads/stories/111.jpg',
'created' => '2014-06-10 07:51:35',
'modified' => '2014-06-13 12:45:43',
'created_by' => '1',
'original' => null,
'tags' => ''
),
'StoryChapter' => array(
(int) 0 => array(
'id' => '110',
'story_id' => '111',
'chapter_id' => '81',
'chapter_title' => 'Second Chapter',
'created' => '2014-06-11 00:00:00'
),
(int) 1 => array(
'id' => '109',
'story_id' => '111',
'chapter_id' => '80',
'chapter_title' => 'First Chapter',
'created' => '2014-06-13 00:00:00'
)
),
'StoryUser' => array(),
'StoryGroup' => array(),
'Favorite' => array(),
'Tag' => array()
),
(int) 1 => array(
'Story' => array(
'id' => '112',
'title' => 'Second Story',
'question' => 'What do you want ?',
'description' => 'edghs rthsghsx ghs rhsgrhsrtgh',
'date' => '2014-06-13',
'image' => '/uploads/stories/112.jpg',
'created' => '2014-06-13 07:43:18',
'modified' => '2014-06-13 07:43:18',
'created_by' => '1',
'original' => null,
'tags' => ''
),
'StoryChapter' => array(),
'StoryUser' => array(),
'StoryGroup' => array(),
'Favorite' => array(),
'Tag' => array()
)
)
I want the find function to order only the StoryChapter by created desc without affecting the order of the found stories .
I hope you understand what I mean .
Thank you
I solved the problem by adding the order in the hasMany array in the Story model
public $hasMany = array(
'StoryChapter' => array(
'className' => 'StoryChapter',
'foreignKey' => 'story_id',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => 'created ASC',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
),

PHP recursion not going back to foreach loop

Need some guidance with some PHP recursion, I'm looping through some data comparing it against a Map, and if a form (in the data) has a subform it needs to be added to the DB with the parents forms ID.
All seems to be working except a subform is an array as there can be multiple subforms of the same type.
Heres a brief structure:
Parent[0]
SF_1[0]
_SF_2[0]
_SF_2[1]
_SF_2[n]
SF_1[1]
SF_2[0]
SF_n[0]
So I add the parent in a separate function, then start the subform recursion (this bit works fine):
private function add_form_records($_data, $map)
{
$form = new FormItem();
foreach($map["fields"] as $item) {
$key = $item->field;
if(array_key_exists($key, $_data))
{
$form->column_data->$key = $_data[$key];
}
}
$form->list_name = $map["sp_list"];
$form->form_id = $this->id_count;
$form->__metadata->type = $this->get_list_id($form->list_name);
//Add the form to SP and get the ID back for the subforms
$id = $this->add_record($form);
foreach($map["subforms"] as $key=>$value) {
$this->add_subform_records($_data[$key], $value, $form->form_id);
}
}
Then heres the function that gets called to add the subforms and then call itself it the subform has subforms:
private function add_subform_records($_data, $_map, $_parent_id)
{
for ($i = 0; $i < count($_data); ++$i) {
$form = new FormItem();
foreach($_map["fields"] as $fieldItem)
{
$key = $fieldItem->field;
if(array_key_exists($key, $_data[$i]))
{
$form->column_data->$key = $_data[$i][$key];
}
}
$form->parent_id = $_parent_id;
$form->list_name = $_map["sp_list"];
$form->form_id = $this->id_count;
$form->form_name = $_map["subform_name"];
$form->__metadata->type = $this->get_list_id($form->list_name);
$id = $this->add_record($form);
if(array_key_exists('subforms', $_map))
{
foreach($_map["subforms"] as $key=>$value) {
foreach($_data as $subform)
{
if(array_key_exists($key, $subform))
{
$this->add_subform_records($subform[$key],$value, $form->form_id);
}
}
}
}
}
}
So the problem is it adds the first subform, goes to add its subforms (and does) but doesn't come back to the for ($i = 0; $i < count($_data); ++$i) to add the others.
Thanks!
$_data
array ( '_submit' => 'submit', '_submittedTime' => '1386837565194', '_submittedTimezoneOffset' => '11', 'ReportedBy' => 'test', 'DateAndTime' => '2013-12-12 19:38', 'Location' => 'hello', 'ClientName' => 'my', 'DiscussionType' => 'Meeting', 'SF_Attendees' => array ( 0 => array ( 'AttendeeName' => 'name', 'Company' => 'is', 'SF_Trip' => array ( 0 => array ( 'test1' => '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', '_action' => 'add', 'test1_mimetype' => 'image/jpeg', 'test2' => '', 'test3' => '', ), ), '_action' => 'add', ), 1 => array ( 'AttendeeName' => 'S', 'Company' => 'T', '_action' => 'add', ), ), 'ReasonforMeeting' => 'test', 'FollowUp' => '2013-12-19 19:38', 'UserEmail' => 'dev#dev.com', 'EmailCopyTo' => 's#s.com', 'SF_Attend' => array ( 0 => array ( 'AttendeeName' => 'test', 'Company' => 'test', '_action' => 'add', ), ), '_action' => 'add', '_uuid' => '63FD4677-C72A-4F1A-B711-963849B6840B', '_DateAndTime_time_offset' => '+11:00', '_FollowUp_time_offset' => '+11:00', )
$map
array ( 'sp_list' => 'ClientMeetingNote', 'fields' => array ( 0 => SchemaItem::__set_state(array( 'field' => 'ReportedBy', 'type' => 'textbox', )), 1 => SchemaItem::__set_state(array( 'field' => 'DateAndTime', 'type' => 'timestamp', )), 2 => SchemaItem::__set_state(array( 'field' => 'Location', 'type' => 'textbox', )), 3 => SchemaItem::__set_state(array( 'field' => 'ClientName', 'type' => 'textbox', )), 4 => SchemaItem::__set_state(array( 'field' => 'DiscussionType', 'type' => 'radio', )), 5 => SchemaItem::__set_state(array( 'field' => 'ReasonforMeeting', 'type' => 'text_area', )), 6 => SchemaItem::__set_state(array( 'field' => 'FollowUp', 'type' => 'timestamp', )), 7 => SchemaItem::__set_state(array( 'field' => 'Signature', 'type' => 'sketch_signature', )), 8 => SchemaItem::__set_state(array( 'field' => 'UserEmail', 'type' => 'email', )), 9 => SchemaItem::__set_state(array( 'field' => 'EmailCopyTo', 'type' => 'email', )), ), 'subforms' => array ( 'SF_Attendees' => array ( 'subform_name' => 'SF_Attendees', 'subform_data_name' => 'SF_Attendees', 'sp_list' => 'Attendees', 'fields' => array ( 0 => SchemaItem::__set_state(array( 'field' => 'AttendeeName', 'type' => 'textbox', )), 1 => SchemaItem::__set_state(array( 'field' => 'Company', 'type' => 'textbox', )), ), 'subforms' => array ( 'SF_Trip' => array ( 'subform_name' => 'SF_Trip', 'subform_data_name' => 'SF_Trip', 'sp_list' => 'Trip', 'fields' => array ( 0 => SchemaItem::__set_state(array( 'field' => 'test1', 'type' => 'camera', )), 1 => SchemaItem::__set_state(array( 'field' => 'test2', 'type' => 'image_library', )), 2 => SchemaItem::__set_state(array( 'field' => 'test3', 'type' => 'file_upload', )), ), ), ), ), 'SF_Attend' => array ( 'subform_name' => 'SF_Attend', 'subform_data_name' => 'SF_Attendees', 'sp_list' => 'Attendees', 'fields' => array ( 0 => SchemaItem::__set_state(array( 'field' => 'AttendeeName', 'type' => 'textbox', )), 1 => SchemaItem::__set_state(array( 'field' => 'Company', 'type' => 'textbox', )), ), 'subforms' => array ( 'SF_Trip' => array ( 'subform_name' => 'SF_Trip', 'subform_data_name' => 'SF_Trip', 'sp_list' => 'Trip', 'fields' => array ( 0 => SchemaItem::__set_state(array( 'field' => 'test1', 'type' => 'camera', )), 1 => SchemaItem::__set_state(array( 'field' => 'test2', 'type' => 'image_library', )), 2 => SchemaItem::__set_state(array( 'field' => 'test3', 'type' => 'file_upload', )), ), ), ), ), ), )
Figured it out!! Had to restructure code as it was looping through the data twice, recursion was working fine I was sending it the wrong data.

Printing all array results in a themable way using PHP?

I want to print all results of the taxonomy_vocabulary_11 array (this is a Drupal 7 site).
If I use <?php print render($content['taxonomy_vocabulary_11'][0]['#title']); ?> I get only one result.
I´ve usuccessfully tried
<?php foreach ($content->taxonomy_vocabulary_11 as $key => $value): $terms = $value['#title']; ?>
<?php print $terms; ?>
<?php endforeach?>
I get this error: Notice: Trying to get property of non-object
Now, this is the output I get using devel module (dpm($node);)
(object) array(
'vid' => '5178',
'uid' => '1',
'title' => 'PROYECTO',
'log' => '',
'status' => '1',
'comment' => '2',
'promote' => '0',
'sticky' => '0',
'nid' => '155',
'type' => 'jornadas',
'language' => 'und',
'created' => '1095048000',
'changed' => '1360589684',
'tnid' => '0',
'translate' => '0',
'revision_timestamp' => '1360589684',
'revision_uid' => '1',
'taxonomy_vocabulary_4' => array(),
'taxonomy_vocabulary_6' => array(
'und' => array(
array(
'tid' => '33',
'taxonomy_term' => (object) array(
'tid' => '33',
'vid' => '6',
'name' => 'Jornadas Gratuitas',
'description' => '',
'format' => NULL,
'weight' => '0',
'vocabulary_machine_name' => 'vocabulary_6',
),
),
),
),
'taxonomy_vocabulary_7' => array(
'und' => array(
array(
'tid' => '40',
'taxonomy_term' => (object) array(
'tid' => '40',
'vid' => '7',
'name' => 'Para PH',
'description' => '',
'format' => NULL,
'weight' => '-10',
'vocabulary_machine_name' => 'vocabulary_7',
),
),
),
),
'taxonomy_vocabulary_11' => array(
'und' => array(
array(
'tid' => '262',
'taxonomy_term' => (object) array(
'tid' => '262',
'vid' => '11',
'name' => 'colegios',
'description' => '',
'format' => NULL,
'weight' => '0',
'vocabulary_machine_name' => 'vocabulary_11',
),
),
array(
'tid' => '543',
'taxonomy_term' => (object) array(
'tid' => '543',
'vid' => '11',
'name' => 'derecho',
'description' => '',
'format' => NULL,
'weight' => '0',
'vocabulary_machine_name' => 'vocabulary_11',
),
),
),
),
'body' => array(
'und' => array(
array(
'value' => "
I´ve also tried <?php print render($content['taxonomy_vocabulary_11']); ?> to treat the taxonomy as any other field, but it won´t print anything.
Note: If I go and do print $content['taxonomy_vocabulary_11']; it just print the word array.
What´s wrong in my approach?
Try:
foreach ($content['taxonomy_vocabulary_11'] as $tv11) {
print render($tv11['#title']);
}
I dont use drupal but this should work if i understood how the $content['taxonomy_vocabulary_11'] array is structured.
Just in case anyone needs it:
<?php
$vid = 11; //vocabulary id
$nid = $node->nid; //it looks for the current loaded node
$query = "SELECT tid, name
FROM (
SELECT td.tid AS tid, name
FROM taxonomy_term_data AS td
JOIN taxonomy_index AS tn
ON td.tid = tn.tid
JOIN node AS n
ON n.nid = tn.nid
WHERE td.vid = ". $vid ."
AND n.status = 1
AND n.nid = ".$nid."
GROUP BY td.tid
) AS t
ORDER BY name ASC";
$result = db_query($query);
foreach($result as $term) {
echo l($term->name, "taxonomy/term/$term->tid") . ', ';
}
?>

Categories