我有一个名为pasakumi的自定义帖子类型,出于某种原因,在wp admin中,视图(全部/已发布/垃圾)仅显示4个随机帖子,尽管我的帖子不止这些。它们也不起作用,例如,“垃圾桶(1)”显示与“全部”相同的4篇帖子(见下面的gif)。如果我创建一个新帖子,它只会替换显示的4个帖子中的一个。
以下是函数的代码。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" ],
];
任何帮助都将不胜感激!
最合适的回答,由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年后,大量的帖子被创建?或者当网站有很多访问者时?