无法在具有自创主题的 WP BACKEND 中显示 *过去* 或 *所有* 事件列表(事件管理器插件)

Impossible to display list of *past* or *all* events (events manager plugin) in WP BACKEND with self-created theme

抱歉,这个问题需要更长的描述,而且我真的没有任何 post 的代码(或者更确切地说,我不知道 post 的代码 - 见下文)。 ..

我有两个网站,其中有两个我使用事件管理器插件自行创建的主题。这些主题在 HTML 结构、php 代码和 javascript 方面非常相似,它们主要在布局方面有所不同,即 CSS 完全不同。这两个主题在前端都可以正常工作。

但是,在 BACKEND/dashboard 中,事件管理器的事件列表存在问题,只有在使用(我们称之为)主题 A 时才会发生:当(在列表上方的 select 菜单中事件)我选择显示“过去的事件”或“所有事件”(或者实际上是该菜单中除默认“未来事件”之外的任何其他选项),结果是一个空的事件列表,带有注释“未找到事件” .

在该页面的顶部出现以下注释:Notice: Array to string conversion in /Applications/MAMP/htdocs/mywebsite/wp-admin/edit.php on line 329(显然指的是名为 $post_type 的变量)。在列表的正上方,除了“Filter selection”按钮之外的所有 select 菜单和按钮都消失了(抱歉,我不确定该按钮的英文文本,因为我使用的是德语系统按钮标有“Auswahl einschränken”)。

我对 check/debug 做了什么:

所以问题显然是由主题引起的。但是主题可以通过哪些方式影响后端显示? - 我绝对没有在主题中添加任何内容来修改后端。与商业主题相比,该主题非常简单。正如我所写:那个主题 (A) 几乎与我的主题 B 相同,因此不会出现此问题。

有没有人知道什么(在主题中)会导致这种行为?我真的被困在这里,感谢任何反馈!

我自己找到了解决方案。

把所有的主题代码(甚至是functions.php文件的完整代码)都贴在问题里就过分了,但问题就在那里。我有以下功能将搜索结果限制为三种特定的 post 类型(我比那个网站上的多):

add_filter( 'pre_get_posts', 'limit_post_types_in_search' );
function limit_post_types_in_search( $query ) {
    if ( $query->is_search ) {
            $query->set( 'post_type', array('page', 'post', 'publication') );
    }
    return $query;
}

因此,正如@CBroe 在他们的评论中也提到的,搜索查询也用于管理页面(仪表板)以按特定条件过滤列表,并且由于“事件”post 类型事件管理器插件不包含在该函数中,不会有任何结果。我可以将它添加到该数组以使其工作,但出于某种原因,我不希望这些事件显示在搜索结果中。

修复它的方法是将 ! is_admin() 作为条件包含在该函数中,以防止它在后端应用。所以完整的修改代码如下:

add_filter( 'pre_get_posts', 'limit_post_types_in_search' );
function limit_post_types_in_search( $query ) {
    if ( ! is_admin() && $query->is_search ) {
            $query->set( 'post_type', array('page', 'post', 'publication') );
    }
    return $query;
}