Code snippets pentru căutarea WordPress

Câteva code snippets care îmbunătățesc funcționalitatea de căutare într-un blog WordPress. Majoritatea se pot implementa printr-un simplu copy/paste, citiți cu atenție unde anume trebuie introdus fiecare snippet.

Exclude o anumită categorie din rezultatele căutării
Copy/paste în fișierul search.php exact înainte de loop, personalizează cu ID-ul categoriei ale cărei rezultate nu le dorește în căutare.

<?php
          query_posts($query_string . '&cat=-3');
?>

Evidențiază termenii căutării în rezultate
Adaugă în functions.php al temei WordPress activate în mod curent

function hls_set_query() {
  $query  = attribute_escape(get_search_query());
  if(strlen($query) > 0){
    echo '
      <script type="text/javascript">
        var hls_query  = "'.$query.'";
      </script>
    ';
  }
}
function hls_init_jquery() {
  wp_enqueue_script('jquery');
}
add_action('init', 'hls_init_jquery');
add_action('wp_print_scripts', 'hls_set_query');

Deschide header.php și copiază codul de mai jos, eventual personalizează culoare de background pentru evidențiere – în exemplu este D3E18A

<style type="text/css" media="screen">
    .hls { background: #D3E18A; }
  </style>
  <script type="text/javascript">
  jQuery.fn.extend({
    highlight: function(search, insensitive, hls_class){
      var regex = new RegExp("(<[^>]*>)|(\\b"+ search.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1") +")", insensitive ? "ig" : "g");
      return this.html(this.html().replace(regex, function(a, b, c){
        return (a.charAt(0) == "<") ? a : "<strong class=\""+ hls_class +"\">" + c + "</strong>";
      }));
    }
  });
  jQuery(document).ready(function($){
    if(typeof(hls_query) != 'undefined'){
      $("#post-area").highlight(hls_query, 1, "hls");
    }
  });
  </script>

Afișează numărul de rezultate al căutării
Copiază în fișierul search.php

<h2 class="pagetitle">Search Result for <?php /* Search Count */ $allsearch = &new WP_Query("s=$s&showposts=-1"); $key = wp_specialchars($s, 1); $count = $allsearch->post_count; _e(''); _e('<span class="search-terms">'); echo $key; _e('</span>'); _e(' &mdash; '); echo $count . ' '; _e('articles'); wp_reset_query(); ?></h2>

Limitează căutarea numai la titlul articolelor
Pentru a căuta doar în titlurile articolelor copy/paste în functions.php

function __search_by_title_only( $search, &$wp_query )
{
    if ( empty($search) )
        return $search; // skip processing - no search term in query
    $q =& $wp_query->query_vars;
    // wp-includes/query.php line 2128 (version 3.1)
    $n = !empty($q['exact']) ? '' : '%';
    $searchand = '';
    foreach( (array) $q['search_terms'] as $term ) {
        $term = esc_sql( like_escape( $term ) );
        $search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
        $searchand = ' AND ';
    }
    $term = esc_sql( like_escape( $q['s'] ) );
    if ( empty($q['sentence']) && count($q['search_terms']) > 1 && $q['search_terms'][0] != $q['s'] )
        $search .= " OR ($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
    if ( !empty($search) ) {
        $search = " AND ({$search}) ";
        if ( !is_user_logged_in() )
            $search .= " AND ($wpdb->posts.post_password = '') ";
    }
    return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 10, 2 );

Redirectează la articol dacă există un singur rezultat al căutării
Bucata de cod următoare își are locul în functions.php

add_action('template_redirect', 'single_result');
function single_result() {
    if (is_search()) {
        global $wp_query;
        if ($wp_query->post_count == 1) {
            wp_redirect( get_permalink( $wp_query->posts['0']->ID ) );
        }
    }
}

Rescrie permalink-ul paginilor de căutări cu /search/termen-cautare în loc de ?s=termen-cautare
Copy/paste în functions.php

function search_url_rewrite_rule() {
	if ( is_search() && !empty($_GET['s'])) {
		wp_redirect(home_url("/search/") . urlencode(get_query_var('s')));
		exit();
	}
}
add_action('template_redirect', 'search_url_rewrite_rule');

Dezactivează complet funcționalitate de căutare
Pentru un site static cu un număr redus de pagini copiază în functions.php

function fb_filter_query( $query, $error = true ) {
	if ( is_search() ) {
		$query->is_search = false;
		$query->query_vars[s] = false;
		$query->query[s] = false;
		// to error
		if ( $error == true )
			$query->is_404 = true;
	}
}
add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

Articole similare:

  1. Code snippets pentru WordPress
  2. Elimină o anumită categorie din rezultatele căutării
  3. LinkedIn Share Button pentru WordPress

Leave a Reply