构建显示具有特定自定义字段值的最旧帖子的页面

时间:2018-04-23 作者:Luke Stevenson

我已经到处寻找这个问题的解决方案,如果我找错了,请原谅我。。

我有一页“Review“(段塞)”review“”。我有许多自定义帖子类型,其中有一个名为asset_status.我希望能够转到评论页面的URL,并显示最旧的自定义帖子waiting 作为asset_status 自定义字段。理想情况下,我还希望能够有“Prev”/“Next”按钮,允许用户使用该字段值转到第二/第三/第四个最旧的帖子。

我已尝试通过pre_get_postsparse_request 挂钩。我在以下方面取得了一些成功parse_request, 但在让网站使用single.php 模板,即使我尝试通过template_include 钩子(尽管我想知道is_page( \'review\' ) 在该阶段失败,因为我覆盖了前面的查询。

add_filter( \'parse_request\', function( $query ) {

    // triggered also in admin pages
    if ( is_admin() )
        return $query;

    // you should check also for page slug, because when pretty permalink are active
    // WordPress use \'pagename\' query vars, not \'page_id\'
    $id = isset($query->query_vars[\'page_id\']) && (int) $query->query_vars[\'page_id\'] === 230;
    // remember to replace "slug" with real page slug
    $name = isset($query->query_vars[\'pagename\']) && $query->query_vars[\'pagename\'] === \'review\';

    if ( ( $id || $name ) && !isset( $query->query_vars[\'error\'] ) ) {
        $query->query_vars = array(
            \'post_type\' => \'asset\' ,
            \'meta_key\' => \'asset_status\' ,
            \'meta_value\' => \'waiting\' ,
            \'post_status\' => \'publish\' ,
            \'posts_per_archive_page\' => 1 ,
            \'orderby\' => \'date\' ,
            \'order\' => \'ASC\' ,
            \'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1 )
        );
    }

    return $query;
});

add_filter( \'template_include\', function( $template ){

    if ( is_page( \'review\' )  ) {
        die(\'THIS IS THE REVIEW PAGE\');
        $new_template = locate_template( array( \'single.php\' ) );
        if ( \'\' != $new_template )
            return $new_template;
    }

    return $template;

}, 99 );
如有任何建议、指示或建议,将不胜感激。

1 个回复
最合适的回答,由SO网友:Luke Stevenson 整理而成

我最终利用了get_template_part() 函数来模块化页面内容的模板。然后,我使用特定于页面的模板覆盖用于该页面主体的查询,并调用页面内容模板来显示它。

结束

相关推荐

是否对多个帖子类型执行REST_POST_QUERY?

如何让rest\\u post\\u查询过滤器跨多个帖子类型工作?我想修改所有帖子类型的orderby,但目前我必须在过滤器名称中指定“post”,这意味着它对我创建的自定义帖子类型不起作用?add_filter(\"rest_post_query\", function ($args) { $args[\"orderby\"] = \"menu_order\"; $args[\"order\"] = \"ASC\"; return $a