function register_hidden_cpt() {
$labels = [
"name" => __("HCPT", "hidden_cpt"),
"singular_name" => __("HCPT", "hidden_cpt"),
"menu_name" => __("HCPT", "hidden_cpt"),
];
$args = [
"label" => __("HCPT", "hidden_cpt"),
"labels" => $labels,
"public" => true, // for acf
"publicly_queryable" => true,
"show_ui" => false,
"show_in_rest" => false,
"rest_controller_class" => "WP_REST_Posts_Controller",
"has_archive" => true,
"show_in_menu" => false,
"show_in_nav_menus" => false,
"delete_with_user" => false,
"exclude_from_search" => false,
"capability_type" => "post",
"map_meta_cap" => true,
"hierarchical" => false,
"rewrite" => false,
"query_var" => true,
"supports" => ["title", "editor", "thumbnail"],
];
register_post_type("hidden_cpt", $args);
}
add_action('init', 'register_hidden_cpt');
Обратитесь к https://developer.wordpress.org/reference/functions/register_post_type/
Некоторые значения массива являются «родителями» для других значений, которые, если родители ложны, вам не нужно включать дочерний элемент (если вы не хотите, чтобы дочерний аргумент явно переопределил значения по умолчанию). Внимательно посмотрите на справочную страницу выше, прочтите описания того, что они делают, и вы сможете очистить код еще больше в соответствии со своими требованиями. Почти все доступно через wp_query, но у меня нет доступа к acf, поэтому младенец предоставит какое-либо представление об этом запросе.
Надеюсь, это помогло. Удачи!
Обновление
Это было бы хорошей идеей спросить на форумах ACF. Вы также можете сделать условие в любой дополнительной функции, которую вы пишете, или сделать ее скрытой для кого-либо, кроме администраторов? например, сделать его publi c для acf, но затем скрыть его в любой написанной вами функции? Я нашел этот пример на stackexchange - https://wordpress.stackexchange.com/questions/28782/possible-to-hide-custom-post-type-ui-menu-from-specific-user-roles
Кредит: @Milo (StackExchange)
Чтобы скрыть пункт меню типа сообщения от пользователей без прав администратора:
function wpse28782_remove_menu_items() {
if( !current_user_can( 'administrator' ) ):
remove_menu_page( 'edit.php?post_type=your_post_type' );
endif;
}
add_action( 'admin_menu', 'wpse28782_remove_menu_items' );
your_post_type
должно быть именем вашего фактического типа сообщения.