Home › Forums › Add-ons › Flexible Content Field › get_row_layout returns empty string when called from subsite
I’m running a multisite and on the main site, I have a post which includes custom fields as well as a flexible content field.
Then on a subsite, I am switching to the main blog and showing content from the post on the main site.
All content is loading fine, except for flexible content. The code is getting the number of rows, however get_row_layout returns blank. Weird thing is that i have the same codebase as my colleague – and for him it’s working. So I believe this may be an issue with how the custom fields are in the database?
Here’s the code, it’s including some debug code I got from another thread:
<?php
// check if the flexible content field has rows of data
if( have_rows('content') ):
echo '<pre>';
print_r( 'value exists' );
echo '</pre>';
$i = 0;
// loop through the rows of data
while ( have_rows('content') ) : the_row();
$i++;
echo '<pre>';
print_r( 'Within loop: ' . $i . ', layout: ' . get_row_layout() );
echo '</pre>';
$content = get_row_layout();
echo $content;
/*
if($content == 'olapic_gallery') {
exit();
}
*/
get_template_part('content/block', $content);
endwhile;
else :
?>
<?
// no layouts found
endif;
?>
What this is outputting:
——-
value exists
Within loop: 1, layout:
Within loop: 2, layout:
Within loop: 3, layout:
——-
This is driving me mad – especially since on my colleague’s dev site everything works as expected – it pulls in the data from the flexible content field. Any ideas?
UPDATE #1
Doing a bit more digging on the above problem. I am outputting all postmeta to the page and it appears that the values are there for the flexible content fields.
So still confused as to what is happening, I decided to have a look inside the ACF source code inside the get_row_layout function. It looks like it isn’t getting inside this if statement, located on line 655 of api.php:
// return value
if( isset($row['value'][ $row['i'] ][ $field_name ]) )
{
echo "we have found a value";
return $row['value'][ $row['i'] ][ $field_name ];
}
Just to reiterate: showing flexible content works fine when on the same site as the post. When I am on a subsite and switching blogs, the flexible content does not return. All other custom fields do though.
UPDATE #2:
Sorry just one more update, I’m echoing out the $value that is returned in the get_row_layout function. When I’m on a subsite, this is a returning a string. But on the mainsite, it returns an object. This looks to be core difference and where the problem lies.
function get_row_layout()
{
// vars
echo "Get row layout var dump is..." . '<br /><br />';
$value = get_sub_field('acf_fc_layout');
var_dump($value);
echo '<br /><br />';
return $value;
}
Return on subsite:
Return on mainsite:
Thanks for your help.
Is the field group in question defined for the sub site or only the site where the posts are created. for ACF fields to work correctly they need to be defined on the current site even if they’re not used there.
I am using php 8 and ACF pro, the get_row_layout() and get_sub_field() returning null. Can you please let me know what is the issue?
Thanks
The topic ‘get_row_layout returns empty string when called from subsite’ is closed to new replies.
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Privacy Policy. If you continue to use this site, you consent to our use of cookies.