管理员未显示所有自定义帖子类型的帖子和视图不起作用

时间:2019-12-04 作者:dans_j

我有一个名为pasakumi的自定义帖子类型,出于某种原因,在wp admin中,视图(全部/已发布/垃圾)仅显示4个随机帖子,尽管我的帖子不止这些。它们也不起作用,例如,“垃圾桶(1)”显示与“全部”相同的4篇帖子(见下面的gif)。如果我创建一个新帖子,它只会替换显示的4个帖子中的一个。

enter image description here

以下是函数的代码。php我有自定义的帖子类型。也许我需要在这里做些改变?

add_action( \'pre_get_posts\', function ( $query ) {
    if ( is_post_type_archive( \'pasakumi\' )  && $query->is_main_query() ) {
        $query->set( \'post_type\', \'pasakumi\' );
        $query->set( \'post_status\', array( \'future\', \'publish\' ) );
        $query->set( \'orderby\', \'date\' );
        $query->set( \'order\', \'ASC\' );
        $query->set( \'posts_per_page\', \'-1\' );
        $query->set( \'date_query\', array( array( \'after\' => array( \'year\' => date( \'Y\' ), \'month\' => date( \'n\', strtotime(\'last month\') ), ), ) ) );
    }
} );    

$args = [
        "label" => __( "Pasākumi", "custom-post-type-ui" ),
        "labels" => $labels,
        "description" => "",
        "public" => true,
        "publicly_queryable" => true,
        "show_ui" => true,
        "delete_with_user" => false,
        "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" => [ "slug" => "pasakumi", "with_front" => true ],
        "query_var" => true,
        "menu_position" => 4,
        "menu_icon" => "dashicons-post-status",
        "supports" => [ "title", "editor", "custom-fields" ],
    ];
任何帮助都将不胜感激!

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

你的问题是:

add_action( \'pre_get_posts\', function ( $query ) {
    if ( is_post_type_archive( \'pasakumi\' )  && $query->is_main_query() ) {
这是伟大的前端!And the backend!! pre_get_posts 适用于所有查询,它的任何内容都不是前端独有的,您也可以在后端过滤查询。因此,您的日期查询将应用于每个查询,甚至是管理查询

首先,检查是否是管理员,也就是:

if ( is_admin() ) {
    return;
}
其次,你不需要把所有的东西都放在这个巨大的if语句中,只需要检查相反的内容,然后早点回来。

第三,这对性能很糟糕:

$query->set( \'posts_per_page\', \'-1\' );
将值设置为高值,这是一个不切实际的高值,但不要将其设置为-1. 当然,它现在可能对你有用,但当业务重心转移和帕萨库米天空火箭的数量增加时,会发生什么呢?还是在10年后,大量的帖子被创建?或者当网站有很多访问者时?