ACF Archives is a little plugin for helping you attach ACF fields to the archive template.
The plugin will add a submenu for each public custom post type with archive defined
and then you can select under ACF rules box.
Want to add or remove the submenu for other custom post types?
Here is a code example you can add to to your theme functions.php
add_filter( 'acf_archive_post_types', 'change_acf_archive_cpt' );
function change_acf_archive_cpt( $cpts ) {
// 'book' and 'movie' are the cpt key.
// Remove cpt
unset( $cpts['book'] );
// Add cpt
$cpts['movie'] = Movies Archive;
return $cpts;
}
Thank you for your contribution, but in order to expand the correct menu item, I had to make some edits to your plugin:
/**
* Load the ACF Assets only on archive options page
* @param string $hook_suffix
* @return void
*/
public function admin_enqueue_scripts( $hook_suffix ) {
$screen = get_current_screen();
if ( strpos($_GET['page'], 'archive-options') !== FALSE ) {
acf_enqueue_scripts();
}
}
/**
* Add ACF menu page for each custom post type
*
* @param string $label
* @param string $menu
*/
private function add_menu( $label, $menu, $post_type ) {
$page_name = sprintf( __( '%s Archive', 'acf-archive' ), $label);
$options = [
'parent_slug' => $menu,
'page_title' => $page_name,
'menu_title' => $page_name,
'capability' => 'edit_posts',
'menu_slug' => 'archive-options-'.$post_type,
];
add_submenu_page(
$options['parent_slug'],
$options['page_title'],
$options['menu_title'],
$options['capability'],
$options['menu_slug'],
[ $this, 'render_menu' ]
);
}
/**
* Check if we are in the current post type for showing the fields.
*
* @param $match
* @param $rule
* @param $options
* @return bool
*/
public function location_rules_match_archive( $match, $rule, $options ) {
if ( ! isset( $_GET['post_type'] ) || ! isset( $_GET['page'] ) ) {
return $match;
}
return $_GET['post_type'] == $rule['value'] && strpos($_GET['page'], 'archive-options') !== FALSE;
}