我正在使用高级自定义字段插件,并创建了一些选项页面,其中包括:
if (function_exists(\'acf_add_options_page\')) {
website_settings_init();
}
function website_settings_init() {
$website_settings = acf_add_options_page(array(
\'page_title\' => \'Website Settings\',
\'menu_title\' => \'Website Settings\',
\'menu-slug\' => \'website-settings\',
\'post_id\' => \'website-settings\',
\'redirect\' => false
));
$form_settings = acf_add_options_sub_page(array(
\'page_title\' => \'Form Settings\',
\'menu_title\' => \'Form Settings\',
\'menu-slug\' => \'form-settings\',
\'post_id\' => \'form-settings\',
\'parent_slug\' => $website_settings[\'menu_slug\']
));
$contact_details = acf_add_options_sub_page(array(
\'page_title\' => \'Contact Details\',
\'menu_title\' => \'Contact Details\',
\'menu-slug\' => \'contact-details\',
\'post_id\' => \'contact-details\',
\'parent_slug\' => $website_settings[\'menu_slug\']
));
}
我有一个字段组,如果选项页=表单设置,则该字段组可见。
其中一个字段是“thank\\u you\\u page”,它返回一个页面ID。
我读过https://www.advancedcustomfields.com/resources/get-values-from-an-options-page/ 它描述了如何使用get_field(\'field_name\', \'option\');
我尝试过:
get_field(\'thank_you_page\', \'option\');
此返回
null
. 我两个都试过了
\'option\'
和
\'options\'
. 但是,如果我尝试:
get_field(\'thank_you_page\', \'form-settings\');
我获得了保存的页面ID。我误解了什么/做错了什么?是因为它是一个选项子页吗?
我正在使用Wordpress 4.9.8和ACF Pro 5.7.7
谢谢
最合适的回答,由SO网友:Zeth 整理而成
我也有同样的问题。它是insanely 记录不完整ACF\'s pages (如中所示,根本不存在)。
问题的核心是,选项页面名称中有空格。当您使用“ID”访问它时,您必须使用\'page_title\'
, 但所有空格都被下划线替换。
请注意not 全部小写。它的书写方式与您所做的完全相同,但只是将空格替换为下划线。
工作示例:functions.php
:
if( function_exists( \'acf_add_options_page\' ) ){
acf_add_options_page( array(
\'page_title\' => \'Some settings\',
\'menu_title\' => \'Some settings\',
\'menu_slug\' => \'some_settings\',
\'icon_url\' => \'dashicons-admin-generic\',
\'capability\' => \'edit_posts\',
\'redirect\' => true,
\'position\' => \'7.4\',
) );
acf_add_options_sub_page( array(
\'page_title\' => \'Acf page with spaces\',
\'menu_title\' => \'Acf page with spaces\',
\'parent_slug\' => \'acf_page_with_spaces\',
) );
} // endif
要访问字段的位置(如
page.php
或
single.php
).
<?php if( have_rows( \'Acf_page_with_spaces\', \'option\' ) ): ?>
<?php
while( have_rows( \'Acf_page_with_spaces\', \'option\' ) ):
the_row();
$foo = get_sub_field( \'foo\' );
$bar = get_sub_field( \'bar\' );
?>
<h1><?php echo $foo; ?></h1>
<p><?php echo $bar; ?></p>
<?php endwhile; ?>
<?php endif; ?>
这有点不合理,但这就是它的工作原理。
这段代码帮助我调试了这个问题:
<?php
echo \'<pre>\';
print_r(acf_get_options_pages());
echo \'</pre>\';
?>
它打印所有已注册的选项页面。