We'll create fresh WordPress site with ACF Options Page Admin installed. You have 20 minutes to test the plugin after that site we'll be deleted.
*** New feature added: Custom Post ID Slugs ***
This is an add on plugin for Advanced Custom Fields (ACF) 5 + the Options Page Add On (or ACF Pro).
This plugin will not provide any functionality unless ACF 5 and the Options Page Add On (or ACF5 Pro)
is installed
This plugin provides an admin interface for adding options pages in ACF including all options for ACF
options pages. Most options are selectable, for example the menu location, capability and where to save
field values to.
For more information see
Other Notes and
Screenshots
This plugin is also on GitHub
https://github.com/Hube2/acf-options-page-adder
The capability required to add/edit options page settings is “manage_options”. This capability can be changed by adding a filter.
add_filter('acf-options-page-adder/capability', 'my_acf_options_page_adder_cap');
function my_acf_options_page_adder_cap($cap) {
$cap = 'edit_published_posts';
return $cap;
}
ACF v5.2.7 added the ability to save options page fields to a post ID. This plugin will let you save the options to the same post ID of the post created when adding an options page using this plugin. You can even use get_fields($options_page_id) without needing to worry about getting the fields for the options page itself. Why? because all the fields used for creating the options page start with an underscore _ and will not be returned by get_fields(). The only thing you need to be careful of is not using any of the field names used by this plugin, which should be extremely easy since they all start with acfop.
It is posible to use a custom slug for saving options page values. For example, if you wanted to save values of an options page to a user you could supply “user_1” as the $post_id value for the opitons page. This also has another side effect. Normally, when ACF saves values to “options” in the options table you will find the fields with the “options_” prefix. So for example, if your field name is “my_field” then in the options table you will find “options_my_field” as the options name. You can supply a custom slug for this, let’s say that you set the post ID setting for the options page to “my-custom-slug”. this would cause the same field in the options page to have the name “my-custom-slug_my_field”. 2 New options have been added to this plugin and you can choose to use the options page slug for the post ID or you can specify a custom slug to use instead.
A function and a filter are available for getting the correct ACF $post_id value to use for getting
values from the options page. This function/filter will return ‘options’ for options pages stored in
options or will return the correct post ID if options are saved to a post. The correct ID is returned
based on the “menu_slug” value of the options page.
/ example 1: function get_options_page_id()
// get the post_id of an options page
$post_id = get_options_page_id('my_options_page_slug');
// get a value using $post_id
$value = get_field('my_option_field', $post_id);
// or it can be combined like this
$value = get_field('my_option_field', get_options_page_id('my_options_page_slug'));
// example 2: by filter
$default = 'option',
$slug = 'my_options_page_slug';
$post_id = apply_filters('get_option_page_id_filter', $default, $slug);
$value = get_field('my_option_field', $post_id);
// or it can be combined like this
$value = get_field('my_option_field', apply_filters('get_option_page_id_filter', $default, $slug));
There is a condition where you will get the incorrect post id. This condition is created by having a top level redirect page that is set to redirect to the first sub options page. If there is no sub options page that exists then it will return the value for the top level options page. If you later create a sub options page it will return the new value from the sub options page. This is why I have see the default value of redirect to false. If you want the top level page to redirect the you need to be aware that it can cause you issues later down the road if you haven’t created a sub option page. You should also specifically set the order of sub options pages so that these do not change at some point in the future because adding a new options page with the same order as the existing top level page will alter the save and get location to the new options page. There’s noting I can do about this, it the way it works. When setting up ACF options pages to save to a post instead of options you must be more precise in with the options page arguments.
Please note that this plugin does not enqueue or include Font Awswsome in the admin of your site.
If you include Font Awsome in your admin then you can use Font Awesome Icons for the icons of
top level options page. For example if you wanted to use Address Book Icon then all you need to do is add fa fa-address-book
into the Icon field when adding or editing the options page.
Version 3.8.0 of this plugin added the ability to customize the ACF options page by adding header and footer content. In addtion to the WYSIWYG fields that have been added to the options page admin editor you can also customize these sections, or the entire options page using filters.
Version 3.8.2 of this plugin adds a toggle to enable this feature. This feature can cause an out of
memory fatal error on options pages that have large numbers of fields. If content was entered into this field before the toggle to turn in on then the toggle will be automatically turned on. Otherwise the default for this option will be off.
Header Content
add_filter('acf-options-page-adder/page-header', 'my_custom_options_page_header', 10, 2);
function my_custom_options_page_header($content, $hook) {
// $content = content, by default it is '' or the value of the WYSIWYG editor
// $hook = the current options page hook that is being called
$content = '<p>My Custom Header Content</p>';
return $content;
}
Footer Content
add_filter('acf-options-page-adder/page-footer', 'my_custom_options_page_footer', 10, 2);
function my_custom_options_page_footer($content, $hook) {
// $content = content, by default it is '' or the value of the WYSIWYG editor
// $hook = the current options page hook that is being called
$content = '<p>My Custom Footer Content</p>';
return $content;
}
Filter Entire Options Page
add_filter('acf-options-page-adder/page-content', 'my_custom_options_page_filter', 10, 2);
function my_custom_options_page_filter($content, $hook) {
// $content = entire content or options page, including all ACF fields
// $hook = the current options page hook that is being called
// caution should be taken when making modification to the page content
return $content;
}
If you would like to remove my little nag that appears on some admin pages add the following to your functions.php file
add_filter('remove_hube2_nag', '__return_true');