我正在尝试做一些看起来应该(也可能)简单的事情:显示高级自定义字段的结果get_field()
在返回shortcode函数时调用。
在主题模板中:
$posts = get_posts(array(
\'posts_per_page\' => -1,
\'post_type\' => \'produce\',
\'orderby\' => \'title\',
\'order\' => \'ASC\'
));
foreach( $posts as $post ):
setup_postdata( $post );
the_title();
print_r(get_field(\'produce_image\'));
根据需要,
the_title();
显示每个自定义帖子项目的标题,以及
get_field(\'produce_image\')
包含项目的图像数组。
然而,在短代码中,虽然WP_Post Object
s包含在$posts
相同,the_title();
返回调用短代码的页面的标题,以及get_field(\'produce_image\')
似乎没有返回任何内容,甚至没有返回空数组。
从中获取真实回报function_exists(\'get_field\')
.
整个短代码是:
<?php
function field_to_fork_produce_display( $atts ) {
$atts = shortcode_atts(array(
\'title\' => \'Produce\'
), $atts );
$title = $atts[\'title\'];
/*
$plugins_dir = plugin_dir_path( __file__ );
$plugins_dir = str_replace("/field-to-fork/lib/", "", $plugins_dir);
include_once($plugins_dir.\'/advanced-custom-fields/acf.php\');
*/
$result = \'<div class="col"><h2 class="text-center"><?=$title?></h2>\';
$posts = get_posts( array(
\'posts_per_page\' => -1,
\'post_type\' => \'produce\',
\'orderby\' => \'title\',
\'order\' => \'ASC\'
));
mz_pr($posts);
if( $posts ):
?>
<?php
foreach( $posts as $post ):
setup_postdata( $post );
mz_pr(get_post_meta($post->ID, \'produce\', true));
?>
<?php
if ( has_post_thumbnail() ) { // check if the post has a Post Thumbnail assigned to it.
$result .= \'<a href="<?php the_permalink(); ?>">\';
the_post_thumbnail( \'thumb\', array( \'class\' => "img-responsive img-center"));
}
$result .= \'</a>\';
$result .= \'<h4><a href="<?php the_permalink(); ?>">\' . the_title() . \'</a></h4>\';
$result .= \'<p>\' . the_excerpt() . \'</p>\';
if ( ! function_exists( \'get_field\' ) ) {
die(\'not there\');
}
mz_pr(function_exists(\'get_field\'));
mz_pr(get_field(\'produce_image\'));
echo get_field(\'produce_image\');
mz_pr("nothing to see here");
$produce_thumbnail = get_field(\'produce_image\', false, false)[\'sizes\'][\'thumbnail\'];
$result .= \'<img src="<?=$produce_thumbnail?>" class="img-responsive field_to_fork_thumb <?php the_title(); ?>">\';
$result .= \'</a>\';
endforeach;
wp_reset_postdata();
endif;
$result .= \'</div><!-- end span 6-->\';
return $result;
}
?>
最合适的回答,由SO网友:MikeiLL 整理而成
“您必须显式地将post ID作为第二个参数传递。”–米洛
在高级自定义字段插件文件中,plugins/advanced-custom-fields/core/api.php
, get_fields
具有默认值$post_id
,并调用get_field_objects
, 它似乎可以运行特定的调用$wpdb->get_col($wpdb->prepare
, 取决于什么$post_id
包含(is_numeric?
, strpos(\'user_\')
), 因此,我猜根据您从中调用它的循环的环境,它将返回不同的结果,除非$post->ID
已指定。
按照上述@Milo的规定:
get_field(\'produce_image\', $post->ID)
将为我们获取图像对象。
我想get_the_title($post->ID)
是本地Wordpress,可能工作方式类似。
跑步get_the_excerpt($post->ID)
返回警告:
get_the_excerpt was called with an argument that is deprecated since version 2.3 with no alternative available.
, 但只是跑步get_the_excerpt()
正在根据需要返回帖子摘录。