Search Using Post ID

时间:2011-08-22 作者:D-B

我希望能够在搜索框中输入帖子ID,以便在搜索结果中返回准确的帖子。我还想保留搜索帖子/页面标题和内容的能力。

例如,用户在搜索框中输入“#123”,搜索结果仅返回post 123。然而,如果我在搜索框中输入“123”,它将返回任何内容或标题中包含“123”的帖子/页面。

This article 解释如何在管理中实现我所追求的目标-我只需要前端的同等功能!

非常感谢您的帮助,谢谢。

3 个回复
最合适的回答,由SO网友:tollmanz 整理而成

我之前问过并回答了自己关于定制搜索的问题。你可以在这里找到答案:The right way to create a custom search page for complex custom post types. 这将是一本很好的读物,可以帮助您理解以下代码。

我会用pre_get_posts 搜索正整数时更改搜索的操作。请注意,我提供的代码不允许您在文章中搜索正整数。

function my_search_pre_get_posts($query)
{
    // Verify that we are on the search page that that this came from the event search form
    if($query->query_vars[\'s\'] != \'\' && is_search())
    {
        // If "s" is a positive integer, assume post id search and change the search variables
        if(absint($query->query_vars[\'s\']))
        {
            // Set the post id value
            $query->set(\'p\', $query->query_vars[\'s\']);

            // Reset the search value
            $query->set(\'s\', \'\');
        }
    }
}

// Filter the search page
add_filter(\'pre_get_posts\', \'my_search_pre_get_posts\');
如果您希望能够搜索ID和搜索字符串,我建议您包含多个输入。您还可以在提供的函数中使用其他逻辑来假设用户正在查找什么,并相应地更改查询变量。

请注意,此代码未经测试。

SO网友:Shammel

You can use this

    function my_search_pre_get_posts($query)
{

    // If it\'s not a search return
    if( !isset( $query->query_vars[\'s\'] ) )
        return;

    // If it\'s a search but there\'s no prefix, return
    if( \'#\' != substr( $query->query_vars[\'s\'], 0, 1 ) )
        return;

    // Validate the numeric value
    $id = absint( substr( $query->query_vars[\'s\'], 1 ) );
    if( !$id )
        return; // Return if no ID, absint returns 0 for invalid values

    // If we reach here, all criteria is fulfilled, unset search and select by ID instead
    unset( $query->query_vars[\'s\'] );
    $query->query_vars[\'p\'] = $id;
}

// Filter the search page
add_filter(\'pre_get_posts\', \'my_search_pre_get_posts\');
SO网友:PROVIDER

这是未测试的,请检查代码注释:

function my_search_pre_get_posts( $query ) {
   // Verify that we are on the search page that that this came from the event search form
   if($query->query_vars[\'s\'] != \'\' && is_search()) {
       // If "s" is a positive integer, assume post id search and change the search variables
       if(absint($query->query_vars[\'s\'])) {
           // Set the post id value
           $query->set(\'p\', $query->query_vars[\'s\']);

           // Reset the search value
           $query->set(\'s\', \'\');
       }
   }
}

// Filter the search page
add_filter(\'pre_get_posts\', \'my_search_pre_get_posts\');

结束

相关推荐

Search options/filters

我正在尝试向侧栏搜索框添加一些复选框选项,similar to this, 用户可以选择是否搜索All Words, Some Word, 或者Entire phrase.我确实在搜索后找到了这个-Wordpress Search Phrases. “句子”选项似乎很有效,但其他选项则不太好。下面的代码是我目前正在处理的,但如果能得到一些帮助使其正常工作,我将不胜感激。非常感谢S(我不想为此使用插件)。<form action=\"<?php bloginfo(\'home\'); ?>