0

我需要注册一个自定义帖子类型,称为“hidden_​​cpt”,它是:

  • 公共网站不可见
  • 没有管理菜单
  • 只能通过 query_posts 或 wp_query 访问
  • acf(或类似的技术低级插件)可见

我尝试使用 register_post_type args 进行一些测试,但它要么太隐藏要么不够......

你有想法吗 ?

提前致谢

编辑:我尝试了以下代码,将一些“真”更改为“假”,反之亦然......但我没有保留所有测试:-(这不是最好的......

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,
        "publicly_queryable" => true,
        "show_ui" => true,
        "show_in_rest" => true,
        "rest_base" => "",
        "rest_controller_class" => "WP_REST_Posts_Controller",
        "has_archive" => true,
        "show_in_menu" => true, 
        "show_in_nav_menus" => true,
        "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');

4

1 回答 1

1
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 论坛上提问是个好主意。您还可以在您编写的任何附加函数中执行条件,或者将其隐藏给管理员以外的任何人?例如,将其公开给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应该是您的实际帖子类型的名称。

于 2020-08-01T11:33:43.493 回答