如何确定搜索查询中的结果是帖子还是页面?

时间:2018-11-13 作者:vm7488

我认为这个问题在互联网上很容易找到……然而,似乎以前没有人遇到过这个问题。

输入搜索词时,列出搜索查询没有问题,I needed posts and pages to be differentiated in a way. 例如:我希望作为帖子(文章)的结果显示作者、阅读时间和发布日期,但我不希望这些元显示在作为页面的结果上。

以下是代码:

    $paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
    $searchArgs = array(
    \'s\' => $s,
    \'paged\' => $paged,
    \'showposts\' => -1,
    );
    $searchQuery = new WP_Query( $searchArgs );
    if ( $searchQuery->have_posts() ) :
    echo \'<h2>\';
    echo \'result: \'.search_query();
    echo \'</h2>\';
    while ( $searchQuery->have_posts() ) : $searchQuery->the_post();
      echo \'link: \'.get_the_permalink();
      echo \'Title: \'.get_the_title();
      echo \'Post Summary: \'.get_the_excerpt();
      $how = ( is_single() ) ? \'this result is a post\' : \'your method did not work\'; //always return false
      $how = ( is_page() ) ? \'this result is a page\' : \'your method did not work\'; //always return false.
      echo \'Post Type: \'.$how; // <------ How to do?
      //***Problem***: is_single() or is_page() does not work, by the way (both return false).
      //I\'ve crossed-checked that the results are actually either a post or a page.
    endwhile;
    endif;

if ( function_exists(\'custom_pagination\') ) {
      custom_pagination($searchQuery->max_num_pages,"",$paged);
    }
所以我的问题是,is\\u page()和is\\u single()在我所做的搜索查询中不起作用。

你如何正确地做到这一点?

2 个回复
SO网友:Justin Downey

这只会告诉你它是一篇文章还是一个页面。如果是类别、标记、存档或自定义帖子类型,该怎么办?如果你介意的话,我会这样写的。

function xyz_get_post_type_name() {
    $wp_type = get_post_type( get_the_ID()  );
    switch ($wp_type) {
        case \'post\' :
            $type_name = \'Article\';
        break;
        case \'page\' :
            $type_name = \'Web Page\';
        break;
        case \'quote\' :
            $type_name = \'Testimonial\';
        break;
        case \'post_tag\' :
            $type_name = \'Topic\';
        break;
        default : 
            $type_name = ucfirst($wp_type);
        break;
    } // END switch
    return $type_name;
} // END xyz_get_post_type_name()
然后,只要在循环中的任何地方回显该函数即可。

while ( $searchQuery->have_posts() ) : $searchQuery->the_post();
    echo \'Post Type Name: \' . xyz_get_post_type_name();
endwhile;
switch语句还允许您为这些帖子类型指定一个“漂亮”的名称,并默认为它们的实际名称(首字母大写)。

SO网友:vm7488

…解决了…5分钟后…

    $queryIsPost = (get_post_type() === \'post\') ? true : false; //the solution
    $queryIsPage = (get_post_type() === \'page\') ? true : false; //the solution

    $searchArgs = array(
    \'s\' => $s,
    \'paged\' => $paged,
    \'showposts\' => -1,
    );
    $searchQuery = new WP_Query( $searchArgs );
    if ( $searchQuery->have_posts() ) :
    echo \'<h2>\';
    echo \'result: \'.search_query();
    echo \'</h2>\';
    while ( $searchQuery->have_posts() ) : $searchQuery->the_post();
      echo \'link: \'.get_the_permalink();
      echo \'Title: \'.get_the_title();
      echo \'Post Summary: \'.get_the_excerpt();
      if ($queryIsPost) {
        $thePostType = "Post";
      } elseif ($queryIsPage) {
        $thePostType = "Page";
      } else {
        $thePostType = "Error. Not determined";
      }
      echo \'Post Type: \'.$thePostType;

    endwhile;
    endif;

结束

相关推荐

如何将变量传递给Get_Search_Form()?

是否可以将变量传递给get_search_form()? 我在两个地方使用它:一个在标题中,另一个在内容的搜索页面上。后者必须具有附加类,例如。search--full. 我试着用is_search() 但尽管它在其他页面上运行良好,但在搜索页面上,两种表单都有search--full 班