我在我的网站上创建了几个“假”页面来显示来自另一个数据库的信息。我最近采用了 gutenberg 编辑器块的主题,但我遇到了这个问题。如果我在域的根文件夹中包含theme.json,则不会显示“假”页面并返回404错误。如果我删除theme.json文件,我会丢失css样式,但页面可以再次工作。有人知道如何解决这个问题吗?
add_filter( 'the_posts', 'generate_fake_page', 0);
function generate_fake_page($posts) {
$post = new stdClass;
$post->post_author = 1;
$post->post_name = $url_slug;
$post->guid = home_url() . '/other/';
$post->post_title = 'My fake page';
// content
$post->post_content = $content;
$post->ID = $my_uniq_id;
$post->post_type = 'page';
$post->post_status = 'static';
$post->post_excerpt = '';
$post->comment_status = 'closed';
$post->ping_status = 'open';
$post->comment_count = 0;
$post->post_date = $my_date
$post->post_date_gmt = $my_date;
$posts = NULL;
$posts[] = $post;
// make wpQuery believe this is a real page too
$wp_query->is_page = true;
$wp_query->is_singular = true;
$wp_query->is_home = false;
$wp_query->is_archive = false;
$wp_query->is_category = false;
$wp_query->is_attachment = false;
unset( $wp_query->query[ 'error' ] );
$wp_query->query_vars[ 'error' ] = '';
$wp_query->is_404 = false;
return $posts;
}
1条答案
按热度按时间brccelvz1#
奇怪我在这里也有同样的事情。我是解决了,但我不知道这能不能解决你的问题。我将写下我的旅程,希望你能从中提取一些信息,为你指出正确的方向:
所以这触发了一个404 https://project.local/slovenie/?fwp_regios_select=slovenie
facetwp_preload_url_vars
预加载一些值。我关闭了过滤器,它开始工作了。但是FacetWP里没有什么奇怪的事情发生。但是,唉,事实并非如此。这应该有用的。
我一步一步地禁用了代码初始化。这里是
parse_query
,我得到了pre_get_posts
。好,回到我的问题:在我的
pre_get_post
中,我做了一个$query->is_archive()
检查。不是\is_archive()
,而是wp_query
上的变量。还有wp_template
,wp_template_part
,acf-taxonomy
,acf-post-type
和my-custom-post-type
,或者在我的情况下,[0 => 'page']
是我所在页面的查询。$query->is_archive()
也是TRUE
,用于menu_nav_items
之类的东西,所以我发现我需要更改那里的代码。我添加了一个检查,如果这个pre_get_posts
是为我的custom-post-type
通过检查顺便说一句!在创建
theme.json
的那一刻,我注意到了一个"post_type" => "wp_global_styles"
。因此,在某些地方,正在查询内容,并且可能the_posts
并不总是期望您在$posts
中填充的内容。您可能的解决方案:检查
WP_Query $query
,它可以作为the_posts
的第二个参数传递。https://developer.wordpress.org/reference/hooks/the_posts/类似于:( isset( $query->query['post_type'] ) && \is_array( $query->query['post_type'] ) && \in_array('page', $query->query['post_type'] ) )
或者如果$query->query['post_type']
是字符串,则检查它是否是字符串。但你明白我的意思。或者在
wp
操作的条件中添加过滤器,但我不知道这是否太晚了。希望这能帮上忙👋