Acf-get_field()使用‘Option’作为post_id不起作用

时间:2018-11-15 作者:Sarah

我正在使用高级自定义字段插件,并创建了一些选项页面,其中包括:

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

谢谢

1 个回复
最合适的回答,由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.phpsingle.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>\';
?>
它打印所有已注册的选项页面。

结束

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: