我是高级IT人员,而不是编码人员。我正在将WordPress search.php页面创建到我的子主题中。此特定页面必须返回3 cpt的结果
下面的代码返回一个ID数组,以使用搜索结果填充一个漂亮的网格插件引擎,称为“基本网格”,该代码正在运行,但是我遇到了以下问题。
就像以错误的方式搜索页面post_type一样。有什么建议吗?
这是搜索页面http://neos.anekitalia.com/?s
<?php
/*
Template Name: Search Page
*/
?>
<?php
get_header();
?>
<?php echo do_shortcode('[et_pb_section global_module="216661"][/et_pb_section]'); //show section Vuoi fare un'altra ricerca? ?>
<div class="et_pb_section et_section_regular" style="padding: 0;min-height:250px;">
<div class="et_pb_row">
<div class="et_pb_column et_pb_column_4_4 et_pb_column_14 et_pb_css_mix_blend_mode_passthrough et-last-child" >
<div class="et_pb_module et_pb_code">
<div class="et_pb_code_inner">
<?php // Build Search Query
$args = array(
's' => $_REQUEST['s'],
'showposts' => -1,
'post_type' => array ( 'tour', 'struttura', 'offerta' ) // define searchable Post Types
);
$tp_allsearch = new WP_Query($args);
$posts = array();
// If there are Search posts
if($tp_allsearch->have_posts()) :
// Go through result
while($tp_allsearch->have_posts()) : $tp_allsearch->the_post();
// Save Post ID in array
$posts[] = $post->ID;
endwhile;
// Build shortcode with the $post array build before to populate essential grid engine
$the_content = do_shortcode('[ess_grid alias="searchdefault" posts="'.implode(',', $posts).'"]');
// Echo Out the result in your page
echo $the_content;
else:
//show section no results found
echo do_shortcode('<div style="max-width: 800px; margin: 0 auto"> [et_pb_section global_module="216673"][/et_pb_section]</div>');
endif;
?>
</div>
</div>
</div>
</div>
</div>
<!--footer and stuffs-->
<?php echo do_shortcode('[et_pb_section global_module="208275"][/et_pb_section]');?>
<?php echo do_shortcode('[et_pb_section global_module="210037"][/et_pb_section]');?>
<?php echo do_shortcode('[et_pb_section global_module="210036"][/et_pb_section]');?>
<?php
get_footer();
编辑:
我发现了为什么会发生这种情况,只是我搜索的所有文本都显示在底部的div部分中,所以我必须找到一种方法将出现在内容中的文本排除在外,有没有一种方法可以使仅查询标题而不包括内容?
答案 0 :(得分:0)
我在class-wp-query
$search = apply_filters_ref_array( 'posts_search', array( $search, &$this ) );
默认情况下,$search
类似于:
(wp_posts.post_title LIKE %s)
OR (wp_posts.post_excerpt LIKE %s)
OR (wp_posts.post_content LIKE %s)
AND (wp_posts.post_password = '')
因此,您似乎可以将过滤器添加到主题的functions.php中。用preg replace或其他方法删除查询的帖子内容和帖子摘录部分是非常棘手的,但是您可以对它进行字符串操作,使其更像:
(wp_posts.post_title LIKE %s)
OR (wp_posts.post_title LIKE %s)
OR (wp_posts.post_title LIKE %s)
AND (wp_posts.post_password = '')
通过类似这样的操作
add_filter('posts_search', 'so_54550119_search_filter');
function so_54550119_search_filter($search){
return str_replace(array('excerpt','content'), array('title','title'), $search);
}