Wordpress 仅在所有_项目中显示某些自定义帖子

Wordpress 仅在所有_项目中显示某些自定义帖子,wordpress,custom-post-type,Wordpress,Custom Post Type,当我注册我的自定义帖子时,它会向WP Admin仪表板添加一个菜单选项,用户可以单击该选项,它会列出该类型的所有自定义帖子。(如果我对我所描述的页面不理解,请查看下面的图片) 该页面列出了该类型的所有自定义帖子,这很好,也很有效,但我只希望该页面显示某些自定义帖子。我只想显示其post_metamy_flag等于true的自定义帖子。我的每个自定义帖子都有一个my_标志post_meta设置为true或false。我希望我的列表页面只显示其my_标志=true的自定义帖子 当我注册自定义帖子类型

当我注册我的自定义帖子时,它会向WP Admin仪表板添加一个菜单选项,用户可以单击该选项,它会列出该类型的所有自定义帖子。(如果我对我所描述的页面不理解,请查看下面的图片)

该页面列出了该类型的所有自定义帖子,这很好,也很有效,但我只希望该页面显示某些自定义帖子。我只想显示其post_meta
my_flag
等于true的自定义帖子。我的每个自定义帖子都有一个
my_标志
post_meta设置为true或false。我希望我的列表页面只显示其
my_标志
=true的自定义帖子

当我注册自定义帖子类型时,可以这样做吗?即使不是,我该如何做到这一点

$labels = array(
    'name'                => _x( '_foo', 'Post Type General Name', '_foo' ),
    'singular_name'       => _x( 'Foo', 'Post Type Singular Name', '_foo' ),
    'menu_name'           => __( '_foo', '_foo' ),
    'parent_item_colon'   => __( 'Parent _foo', '_foo' ),
    'all_items'           => __( 'Foo Posts', '_foo' ),
    'view_item'           => __( 'View Foo', '_foo' ),
    'add_new_item'        => __( 'Add New Foo', '_foo' ),
    'add_new'             => __( 'Add New', '_foo' ),
    'edit_item'           => __( 'Edit Foo', '_foo' ),
    'update_item'         => __( 'Update Foo', '_foo' ),
    'search_items'        => __( 'Search Foo', '_foo' ),
    'not_found'           => __( 'Not Found', '_foo' ),
    'not_found_in_trash'  => __( 'Not found in Trash', '_foo' ),
);

$args = array(
    'label'               => __( 'foo', '_foo' ),
    'description'         => __( 'My custom posts', '_foo' ),
    'labels'              => $labels,
    'supports'            => array( 'title', 'revisions', 
    'taxonomies'          => array( 'foo' ), 
    'hierarchical'        => false,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => 'my-plugin-menu',
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'show_in_rest'        => true,
    'query_var'           => true,
    'menu_position'       => 5,
    'can_export'          => true,
    'has_archive'         => true,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'capability_type'     => 'page'
);

register_post_type('foo', $args);
我将post_meta设置为:

add_post_meta($post_id, 'my_flag', true, true);

您可以编辑wp\u查询,该查询将从数据库中获取帖子列表。 请尝试以下功能:

function filter_my_posts($query) {
    if ( $query->is_home() && $query->is_main_query() && is_post_type_archive( 'your_custom_post_type' ) ) {
        $query->set( 
            'meta_key' => 'my_flag',
            'meta_value => true,
        );
    }
}
add_action( 'pre_get_posts', 'filter_my_posts' );
祝你好运,请测试并让我知道发生了什么