将搜索字段限制为仅搜索具有自定义字段的自定义帖子类型

时间:2014-02-15 作者:jshjohnson

我相信这是可能的,我只是觉得我走的路不对。基本上,我有两种自定义帖子类型(调查者和中心),它们都在各自的归档页面(下面)上有搜索表单,以根据用户输入和自定义字段(自定义字段搜索插件正在索引)过滤归档。

http://dev.anklearthritis.co.uk/find-a-specialist/ (调查人员)http://dev.anklearthritis.co.uk/centres/ (中心)

然而,目前,无论用户搜索什么,前6个条目总是显示出来。

我在搜索文件中使用以下查询(针对调查人员)

$args = array( 
    \'post_type\' => \'investigator\', 
    \'paged\' => $paged,
    \'orderby\' => \'title\',
    \'order\' => \'ASC\',
    \'posts_per_page\' => 6, //Limits the amount of posts on each page
    \'post_title\' => \'LIKE %\'.$_POST[\'s\'].\'%\' 
);
$loop = new WP_Query( $args ); 
然后,我使用while循环在页面上显示每个结果。

这可能吗?如果可能,我做错了什么?谢谢

1 个回复
SO网友:s_ha_dum

post_title 不是的有效参数WP_Query. 如果转储SQL,您将看到它被忽略:

字符串(189)“从wp\\U posts中选择SQL\\U CALC\\U FOUND\\U ROWS wp\\U posts.ID,其中1=1,wp\\U posts.post\\U type=\'调查员\'和(wp\\U posts.post\\U status=\'发布\')按wp\\U posts.post\\U title ASC LIMIT 0,6排序”

您可以使用name (或pagename) 相反,但您不能像那样推送原始SQL。这行不通:

字符串(158)“选择wp\\U帖子。*从wp\\U帖子中,其中1=1,wp\\U帖子。帖子名称=\'like-%d00d\'和wp\\U帖子。帖子类型=\'调查员\'顺序,按wp\\U帖子。帖子标题ASC”

如果您使用s 参数--像这样\'s\' => $_POST[\'s\']--, 你会得到你想要的东西:

字符串(310)“从wp\\U posts中选择SQL\\U CALC\\U FOUND\\U ROWS wp\\U posts.ID,其中1=1和((wp\\U posts.post\\U title,如\'\'%d00d%\')或(wp\\U posts.post\\U content,如\'\'%d00d%\'))和(wp\\U posts.post\\U密码=\'\')以及wp\\U posts.post\\U类型=\'调查者\',(wp\\U posts.post\\U状态=\'发布\')顺序,按wp\\U posts.post\\U title ASC限制0,6”

但您搜索的字段不仅仅是标题。要将其限制为仅标题,可以使用another of my answers:

function only_title_search_wpse_119422( $search ) {
    remove_filter( \'posts_search\', \'only_title_search_wpse_119422\' );

    global $wpdb;

    $pattern = "/\\({$wpdb->posts}.post_title[^)]+\\)/";
    preg_match_all( $pattern, $search, $matches );

    if ( ! empty( $matches[0] ) ) {
        $search = sprintf(
            " AND (%s)",
            implode( " AND ", $matches[0] )
        );
    }

    return $search;
}
add_filter( \'posts_search\', \'only_title_search_wpse_119422\' );

结束

相关推荐

Private Posts/Pages & Search

我有一个网站,那里有一个私人页面和一个私人帖子。当以管理员身份登录时,我可以查看这两个,它们甚至会出现在搜索中。然而,当以编辑身份登录时,我仍然可以看到这些帖子,但它们不会出现在搜索中。我觉得这有点奇怪,我想知道是否有人经历过这种情况,或者知道如何在以编辑身份登录时在搜索中显示私人页面和帖子?

将搜索字段限制为仅搜索具有自定义字段的自定义帖子类型 - 小码农CODE - 行之有效找到问题解决它

将搜索字段限制为仅搜索具有自定义字段的自定义帖子类型

时间:2014-02-15 作者:jshjohnson

我相信这是可能的,我只是觉得我走的路不对。基本上,我有两种自定义帖子类型(调查者和中心),它们都在各自的归档页面(下面)上有搜索表单,以根据用户输入和自定义字段(自定义字段搜索插件正在索引)过滤归档。

http://dev.anklearthritis.co.uk/find-a-specialist/ (调查人员)http://dev.anklearthritis.co.uk/centres/ (中心)

然而,目前,无论用户搜索什么,前6个条目总是显示出来。

我在搜索文件中使用以下查询(针对调查人员)

$args = array( 
    \'post_type\' => \'investigator\', 
    \'paged\' => $paged,
    \'orderby\' => \'title\',
    \'order\' => \'ASC\',
    \'posts_per_page\' => 6, //Limits the amount of posts on each page
    \'post_title\' => \'LIKE %\'.$_POST[\'s\'].\'%\' 
);
$loop = new WP_Query( $args ); 
然后,我使用while循环在页面上显示每个结果。

这可能吗?如果可能,我做错了什么?谢谢

1 个回复
SO网友:s_ha_dum

post_title 不是的有效参数WP_Query. 如果转储SQL,您将看到它被忽略:

字符串(189)“从wp\\U posts中选择SQL\\U CALC\\U FOUND\\U ROWS wp\\U posts.ID,其中1=1,wp\\U posts.post\\U type=\'调查员\'和(wp\\U posts.post\\U status=\'发布\')按wp\\U posts.post\\U title ASC LIMIT 0,6排序”

您可以使用name (或pagename) 相反,但您不能像那样推送原始SQL。这行不通:

字符串(158)“选择wp\\U帖子。*从wp\\U帖子中,其中1=1,wp\\U帖子。帖子名称=\'like-%d00d\'和wp\\U帖子。帖子类型=\'调查员\'顺序,按wp\\U帖子。帖子标题ASC”

如果您使用s 参数--像这样\'s\' => $_POST[\'s\']--, 你会得到你想要的东西:

字符串(310)“从wp\\U posts中选择SQL\\U CALC\\U FOUND\\U ROWS wp\\U posts.ID,其中1=1和((wp\\U posts.post\\U title,如\'\'%d00d%\')或(wp\\U posts.post\\U content,如\'\'%d00d%\'))和(wp\\U posts.post\\U密码=\'\')以及wp\\U posts.post\\U类型=\'调查者\',(wp\\U posts.post\\U状态=\'发布\')顺序,按wp\\U posts.post\\U title ASC限制0,6”

但您搜索的字段不仅仅是标题。要将其限制为仅标题,可以使用another of my answers:

function only_title_search_wpse_119422( $search ) {
    remove_filter( \'posts_search\', \'only_title_search_wpse_119422\' );

    global $wpdb;

    $pattern = "/\\({$wpdb->posts}.post_title[^)]+\\)/";
    preg_match_all( $pattern, $search, $matches );

    if ( ! empty( $matches[0] ) ) {
        $search = sprintf(
            " AND (%s)",
            implode( " AND ", $matches[0] )
        );
    }

    return $search;
}
add_filter( \'posts_search\', \'only_title_search_wpse_119422\' );

相关推荐

Media searching ignored

我们的网站使用WordPress,有很多媒体文件。我们网站的媒体名称格式如下[Car brand\'s name]-[number].jpg, 例如Tesla-1.jpg 或Aston Martin-3.jpg. 因此,我们可以通过搜索文章的名称轻松找到文章的特定媒体。但突然间,我们找不到媒体。我们正在尝试搜索名称为的媒体,但搜索结果不变。(不搜索任何内容时的媒体屏幕)(搜索Aston Martin时的媒体屏幕)当然,在填充搜索文本框后,它会显示一个加载图标,但结果总是一样的。为什么会发生这种情况?更新+