I have setup fields and sub-fields using Advanced Custom Fields (ACF). The structure is similar to:
Field: Pet Details
- Sub-Field: Pet Name (text)
- Sub-Field: Pet Birthday (date picker)
- Sub-Field: Pet Gender (taxonomy, select)
- Additional...
I have been able to use these within my custom post type (/cpt_slug/post_title) using the get_field(), get_sub_field() functions, however I have not been able to usilise the default ACF functions ( get_field(), get_sub_field(), etc ) in conjunction with additional pages where this information is being displayed - in this case, domain.com/account (woocommerce my account page) which is fine as I'm happy to use WP_Query.
While I have a working code below, it requires me to setup $variable = get_post_meta( $pet->ID, field_sub_field, true ) for each acf sub_field. Given the array structure,
The best result I could come up with was echo $details['pet_details_pet_name'][0] which outputs 'Cooper' (correct), but with my limited knowledge of arrays, is there any chance that the '0' will ever become a '1' and not allow this to work? I don't believe that the cpt/acf will ever put a second value in the array but I would like to hear your thoughts.
Code
global $current_user;
$query = new WP_Query ( array (
'post_type' => 'audp_pets',
'author' => $current_user->ID,
'order' => 'ASC'
) );
$pets = $query->posts;
if ( $pets ) {
foreach ( $pets as $pet ) {
var_dump ( $pet );
?><hr><?php
echo "\$pet->post_title = " . $pet->post_title . '<br />';
?><hr><?php
$details = get_post_meta( $pet->ID );
$pet_name = get_post_meta( $pet->ID, 'pet_details_pet_name', true );
echo "\$pet_name = " . $pet_name . '<br />';
?><hr><?php
var_dump ( $details );
}
wp_reset_postdata();
}
Outputs (Source)
object(WP_Post)#13185 (24) {
["ID"]=>
int(952)
["post_author"]=>
string(1) "1"
["post_date"]=>
string(19) "2020-01-16 16:24:17"
["post_date_gmt"]=>
string(19) "2020-01-16 05:24:17"
["post_content"]=>
string(0) ""
["post_title"]=>
string(6) "AA0AA0"
["post_excerpt"]=>
string(0) ""
... (additional fields)
}
(N.B -- $pet->post_title = AA0AA0)
array(56) {
["_edit_last"]=>
array(1) {
[0]=>
string(1) "1"
}
["_edit_lock"]=>
array(1) {
[0]=>
string(12) "1579152259:1"
}
["pet_details_pet_name"]=>
array(1) {
[0]=>
string(6) "Cooper"
}
["_pet_details_pet_name"]=>
array(1) {
[0]=>
string(19) "field_5e1189ab705b2"
}
["pet_details_pet_birthday"]=>
array(1) {
[0]=>
string(8) "20130313"
}
... (additional fields)
}
(N.B. $pet_name = Cooper)
Thank-you in advance.
the loopif($query->have_posts()): while($query->have_posts):the_post();etc. then you set it up to be able to do it in a normal style. - Else you can also send the post id, to any ACF function and get the value - like thisget_field('fieldname', $pet->ID)get_field()andget_sub_field()' working on this single-custom-post.php and nothing works. It works fine on my/custom-post-slug/page_title/` but not on this page. Furthermore, I found a number of articles stating that the number of requests were MUCH more with ACF than with WP_Query().get_field()orget_sub_field()in this page (yes I have get_header() and get_footer() included).