有时一个页面使用数十个ACF字段 - 例如在中继器字段的情况下。数十个 ACF 字段意味着数十个if (get_field('blabla') { the_field('blabla'); }
(以及其他 ACF 代码(堵塞了页面的 PHP 模板文件并使其实际上难以阅读和维护,我想将所有 ACF 数据提取到 PHP 变量中供我的模板使用。
问题:如果我这样做,我需要在模板的开头将所有 PHP 变量声明为全局变量。没有前者那么丑陋,但仍然丑陋。
我还没有想到其他选择吗?
我认为对于中继器字段,您可以在同一页面中为每个特定任务设置一个函数,并在同一文件中根据需要调用该函数。例如:
<html>
<head>
</head>
<body>
<div><?php call_user_func( 'who_weve_worked_with', get_the_ID() ); ?></div>
</body>
</html>
现在,您可以将所有函数放在单独的文件中,例如:
theme-folder/inc/acf-fucntions.php
它需要包含在函数中.php
<?php require get_template_directory() . '/inc/acf-fucntions.php'; ?>
对于子主题,
<?php require get_stylesheet_directory() . '/inc/acf-fucntions.php'; ?>
现在,在 acf 函数.php,
<?php
if( !function_exists( 'who_weve_worked_with' ) ) {
function who_weve_worked_with( $post_id ) {
?>
<div>
<ul class="nav nav-tabs">
<?php
if ( have_rows( 'repeater_field_name', $post_id ) ) :
$i = 0;
while ( have_rows ( 'repeater_field_name', $post_id ) ) : the_row();
$img = get_sub_field( 'repeater_sub_field_name', $post_id );
?>
<li role="presentation">
<img src="<?php echo $img[ 'url' ]; ?>" alt="<?php echo $img[ 'alt' ]; ?>">
</li>
<?php
$i++;
endwhile;
endif;
?>
</ul>
</div>
<?php
}
}
请不要忘记在调用函数时传递 POST ID,您的函数需要一个参数,即 POST ID,如上所示。
希望这对你有用。
谢谢