1

I'm trying to stick a post in the search results for the value and meta_key meta_value. If the search results in the post is meta_key - sticky and meta_value - fatured, the display on top of these posts. This is my search.php :

<?php get_header(); ?>

<?php if (is_paged()) $is_paged = true; ?>

<div class="wrapper" >
    <div class="clearfix container_border">

        </div>

    <?php
    $is_search = 0;
    global $wpdb;
    $totalpost_count = 0;
    $all_pids = $wpdb->get_var("SELECT group_concat(ID) FROM $wpdb->posts where post_status='publish'");
    $all_pids_arr = explode(',',$all_pids);
    if($_REQUEST['srch_location'])
    {
        $is_search = 1;
        $srch_location = $_REQUEST['srch_location'];
        //$location_pids = $wpdb->get_var("SELECT group_concat(tr.object_id) FROM $wpdb->term_taxonomy tt join $wpdb->term_relationships tr on tr.term_taxonomy_id=tt.term_taxonomy_id where tt.term_id=\"$srch_location\"");
        $location_pids = $wpdb->get_var("select group_concat(post_id) from $wpdb->postmeta where meta_key like 'add_location' and meta_value like \"$srch_location\"");
        $location_pids_arr = explode(',',$location_pids);
        $all_pids_arr = array_intersect($all_pids_arr,$location_pids_arr);
    }


    if($is_search && !$all_pids_arr)
    {
        $all_pids_arr[0] = 'nopost';
    }
    if($_REQUEST['srch_property_id'])
    {
        $post_ids_str = $_REQUEST['srch_property_id'];
        $sub_cat_sql .= " and p.ID in ($post_ids_str) ";
    }else
    {
        if($all_pids_arr)
        {
            $post_ids_str = implode(',',$all_pids_arr);
            if($post_ids_str)
            {
                $sub_cat_sql .= " and p.ID in ($post_ids_str) ";
            }
        }   
    }
    $featurecat = get_cat_id_from_name(get_option('ptthemes_featuredcategory'));
    if($featurecat)
    {
        $srch_feature_pids = $wpdb->get_var("SELECT group_concat(tr.object_id) FROM $wpdb->term_taxonomy tt join $wpdb->term_relationships tr on tr.term_taxonomy_id=tt.term_taxonomy_id where tt.term_id in ($featurecat)");
        $srch_feature_pids = '';
    }
    $blogcat = get_cat_id_from_name(get_option('ptthemes_blogcategory'));
    $blogcatcatids = get_sub_categories($blogcat,'string');
    if($blogcatcatids)
    {
        $srch_blog_pids = $wpdb->get_var("SELECT group_concat(tr.object_id) FROM $wpdb->term_taxonomy tt join $wpdb->term_relationships tr on tr.term_taxonomy_id=tt.term_taxonomy_id where tt.term_id in ($blogcatcatids)");
    }
    if($srch_blog_pids && $srch_feature_pids)
    {
        $sub_cat_sql .= " and p.ID not in ($srch_blog_pids,$srch_feature_pids) ";
    }elseif($srch_blog_pids && $srch_feature_pids=='')
    {
        $sub_cat_sql .= " and p.ID not in ($srch_blog_pids) ";
    }elseif($srch_blog_pids=='' && $srch_feature_pids)
    {
        $sub_cat_sql .= " and p.ID not in ($srch_feature_pids) ";
    }
    $srch_sql = "select p.* from $wpdb->posts p $post_meta_join where p.post_status='publish' and p.post_type='post'  $sub_cat_sql";
    if($srch_feature_pids)
    {
        $feature_srch_sql = "select p.* from $wpdb->posts p where p.post_status='publish' and p.post_type='post' and p.ID in ($srch_feature_pids)";
        $srch_sql = " select * from (($feature_srch_sql) union ($srch_sql))";
    }

    $totalpost_count = $wpdb->get_var("select count(p.ID) from $wpdb->posts p $post_meta_join where p.post_status='publish' and p.post_type='post'  $sub_cat_sql");
    global $posts_per_page,$paged;
    if($paged==''){$paged=1;}
    $startlimit = $posts_per_page*($paged-1);
    $srch_sql .= "  order by p.ID desc limit $startlimit , $posts_per_page";
    $post_info = $wpdb->get_results($srch_sql);

    ?> 



   <div class="contentarea">


    <h5>
    <?php
    if($_REQUEST['s'] == 'viewmore')
    {
        _e(LATEST_PROPERTIES_TEXT);
    }
    elseif(is_category() && $_REQUEST['search']=='')
    {
        echo single_cat_title();
    }else
    {
        //echo __(SEARCH_TEXT). get_search_param();
        echo get_search_param();
    }   
    ?></h5>     
    <?php if($post_info) { ?>

    <ul class="display ">
    <?php
    $count=0;
    foreach($post_info as $post_info_obj)
    {
        $count++;
        $post = $post_info_obj;
        get_property_info_li($post);
        if($count%3==0)
        {
        ?>
        <li class="blank"></li>
        <?php   
        }
    }
    ?>
    </ul>
    <?php
        }else
        {
            _e(NO_PROPERTY_AVAILABLE_MSG);
            if($_POST['search']=='search')
            {
                echo get_search_param();
            }
        }
        ?>
    <?php if($post_info) { ?>
    <div class="pagination">
         <?php if (function_exists('wp_pagenavi')) { ?><?php wp_pagenavi(); ?><?php } ?>
     </div>
    <?php }?>

1 Answer 1

1

A simple hack. Edit: putting the featured post ids in an array and checking that array in the main loop.

global $post;
$post_IDs = array();
foreach($post_info as $post_info_obj) {
    $post_IDs[] = $post_info_obj->ID;        
}

$featured_IDs = array();
$query1 = new WP_Query(array('meta_key'=>'sticky','meta_value'=>'featured','post__in'=>$post_IDs));

while($query1->have_posts()) {
    $query1->the_post();
    $featured_IDs[] = $post->ID;
    get_property_info_li($post);
}

First thing do to in the main loop: if the post is featured, skip it.

if(in_array($post_info_obj->ID,$featured_IDs)) { continue; }
2
  • Nor would you add to this code Do_not_duplicate in search results ? Apr 23, 2012 at 4:01
  • Yeah, I made a small edit to avoid duplicates.
    – offroff
    Apr 23, 2012 at 8:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.