Показывать только определенные пользовательские сообщения в all_items - PullRequest
0 голосов
/ 14 февраля 2020

Когда я регистрирую свой пользовательский пост, он добавляет пункт меню в панель администратора WP, на который могут щелкать пользователи, и в нем перечислены все пользовательские посты этого типа. (Пожалуйста, смотрите мое изображение ниже, если я не понимаю смысл страницы, которую я описываю).

Эта страница со списком всех пользовательских сообщений этого типа хороша и работает, но я только хочу, чтобы эта страница отображалась определенных пользовательских сообщений. Я хочу показать только пользовательские сообщения, чье post_meta my_flag равно true. У каждого из моих пользовательских сообщений my_flag post_meta установлено значение true или false. Я хочу, чтобы на моей странице списка отображались только те сообщения, чьи my_flag = 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);

enter image description here

1 Ответ

0 голосов
/ 14 февраля 2020

вы можете редактировать wp_query, который будет получать список сообщений из базы данных. Пожалуйста, попробуйте следующую функцию:

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' );

Удачи, пожалуйста, проверьте и дайте мне знать, что происходит.

...