如果WP_QUERY中有数据,如何签入Functions.php?

时间:2021-06-28 作者:MT09

我在主页上有两个不同的WP查询。我需要检查函数中的$home\\u查询条件。php然后,如果$home\\u query返回null,我想做些什么。我尝试了pre\\u get\\u posts操作,但我无法捕获$home\\u查询数据,而且它运行了两次,因为页面上有两个WP\\u查询。

使用If$home\\u query返回null的分页方式,我想将页面重定向到404页面并获取404响应的代码。

例如https://example.com/page/200/ 页码是200,但在页面中没有200页码,我想重定向404页面并得到404响应,而不是;“不显示结果文本”;

指数php

$home_query = new WP_Query( array(\'posts_per_page\' => get_query_var(\'posts_per_page\'),\'paged\' => $current_page ) );


$featured_post = new WP_Query(array(\'p\'=>get_theme_mod(\'featured-content-callout-post\'),\'order\' => \'DESC\',\'posts_per_page\'=> 1));


            if($home_query->have_posts()):
                    while ($home_query->have_posts()):
                        $home_query->the_post();
                        get_template_part(\'template-parts/content\',\'list\');
                    endwhile;
            else;
                   // get_template_part(\'template-parts/content\',\'none\');
                      // I tried to use redirect code in here but I couldn\'t.
            endif;
谢谢你的帮助

2 个回复
SO网友:Fabian Mossberg

您可以通过执行以下操作来检查查询是否返回了任何帖子$home_query->have_posts().

$home_query = new WP_Query( array(\'posts_per_page\' => get_query_var(\'posts_per_page\'),\'paged\' => $current_page ) );
if( !$home_query->have_posts() ){
   // Do this if $home_query had no posts.
}

SO网友:vlatkorun

您可以使用两个挂钩来实现所需的结果:

使用parse_query 操作钩子(查询变量在此钩子中初始化)来创建$home_query 并使用wp_cache_set 函数(缓存中的内容仅为当前请求存储)template_redirect 用于从缓存中提取内容的操作挂钩,使用wp_cache_get 函数并查看是否有结果。从这里可以重定向到其他页面。请查看本页底部的钩子文档和示例:https://developer.wordpress.org/reference/hooks/template_redirect/下面是一个示例代码:

function custom_parse_query() {
    $home_query = new WP_Query( array(\'posts_per_page\' => get_query_var(\'posts_per_page\'), \'paged\' => get_query_var(\'page\') ) );
    wp_cache_set(\'home_query\', $home_query);
}
add_action( \'parse_query\', \'custom_parse_query\' );

function custom_template_redirect() {

    $home_query = wp_cache_get(\'home_query\');

    if( $home_query instanceof WP_Query && ! $home_query->have_posts() ) {
        wp_redirect( home_url( \'/signup/\' ) );
        exit();
    }
}
add_action( \'template_redirect\', \'custom_template_redirect\' );

 

相关推荐

两个函数具有不同的参数和Add_Actions,但代码相同

我觉得这很简单。我有两个包含相同代码的函数,但需要有不同的add\\u操作和参数。必须有一种方法可以做到这一点,所以当我想添加更多代码时,我不会在两者之间复制和粘贴,而且你不应该复制代码。我错过了什么?一个用于ACF并在更新帖子类型时激发,另一个用于Admin列,该列在内联编辑相同的帖子类型时激发相同的操作。如果有帮助的话,我会把它们放在插件文件中。 function acp_editing_saved_usage1( AC\\Column $column, $post_id, $value ) {