mirror of
https://git.sindominio.net/estibadores/wordpress.git
synced 2024-11-14 23:21:07 +01:00
173 lines
6.2 KiB
PHP
173 lines
6.2 KiB
PHP
|
<?php
|
|||
|
/*
|
|||
|
Plugin Name: Highlight Search Terms
|
|||
|
Plugin URI: http://status301.net/wordpress-plugins/highlight-search-terms
|
|||
|
Description: Wraps search terms in the HTML5 mark tag when referrer is a non-secure search engine or within wp search results. Read <a href="http://wordpress.org/extend/plugins/highlight-search-terms/other_notes/">Other Notes</a> for instructions and examples for styling the highlights. <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=ravanhagen%40gmail%2ecom&item_name=Highlight%20Search%20Terms&no_shipping=0&tax=0&bn=PP%2dDonationsBF&charset=UTF%2d8&lc=us" title="Thank you!">Tip jar</a>.
|
|||
|
Version: 1.5.5
|
|||
|
Author: RavanH
|
|||
|
Author URI: http://status301.net/
|
|||
|
Text Domain: highlight-search-terms
|
|||
|
*/
|
|||
|
|
|||
|
/* Copyright 2020 RavanH (email : ravanhagen@gmail.com)
|
|||
|
|
|||
|
This program is free software; you can redistribute it and/or modify
|
|||
|
it under the terms of the GNU General Public License as published by
|
|||
|
the Free Software Foundation; either version 3 of the License, or
|
|||
|
(at your option) any later version.
|
|||
|
|
|||
|
This program is distributed in the hope that it will be useful,
|
|||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||
|
GNU General Public License for more details.
|
|||
|
|
|||
|
You should have received a copy of the GNU General Public License
|
|||
|
along with this program; if not, <http://www.gnu.org/licenses/> or
|
|||
|
write to the Free Software Foundation Inc., 59 Temple Place,
|
|||
|
Suite 330, Boston, MA 02111-1307 USA.
|
|||
|
|
|||
|
The GNU General Public License does not permit incorporating this
|
|||
|
program into proprietary programs.
|
|||
|
*/
|
|||
|
|
|||
|
if ( ! defined( 'WPINC' ) ) die;
|
|||
|
|
|||
|
/* -----------------
|
|||
|
* CLASS
|
|||
|
* ----------------- */
|
|||
|
|
|||
|
class HighlightSearchTerms {
|
|||
|
|
|||
|
/**
|
|||
|
* Plugin variables
|
|||
|
*/
|
|||
|
|
|||
|
// plugin version
|
|||
|
private static $version = '1.5.3';
|
|||
|
|
|||
|
// filtered search terms
|
|||
|
private static $search_terms = null;
|
|||
|
|
|||
|
// Change or extend this to match themes content div ID or classes.
|
|||
|
// The hilite script will test div ids/classes and use the first one it finds.
|
|||
|
// When referencing an *ID name*, just be sure to begin with a '#'.
|
|||
|
// When referencing a *class name*, try to put the tag in front,
|
|||
|
// followed by a '.' and then the class name to *improve script speed*.
|
|||
|
static $areas = array(
|
|||
|
'#groups-dir-list', '#members-dir-list', // BuddyPress compat
|
|||
|
'div.bbp-topic-content,div.bbp-reply-content,li.bbp-forum-info,.bbp-topic-title,.bbp-reply-title', // bbPress compat
|
|||
|
'article',
|
|||
|
'div.hentry',
|
|||
|
'div.post',
|
|||
|
'#content',
|
|||
|
'#main',
|
|||
|
'div.content',
|
|||
|
'#middle',
|
|||
|
'#container',
|
|||
|
'div.container',
|
|||
|
'div.page',
|
|||
|
'#wrapper',
|
|||
|
'body'
|
|||
|
);
|
|||
|
|
|||
|
/**
|
|||
|
* Plugin functions
|
|||
|
*/
|
|||
|
|
|||
|
public static function init() {
|
|||
|
// -- HOOKING INTO WP -- //
|
|||
|
// append search query string to results permalinks
|
|||
|
// wp is the earliest hook where get_query_var('search_terms') will return results
|
|||
|
add_action( 'wp', array(__CLASS__,'add_url_filters') );
|
|||
|
|
|||
|
// enqueue main script
|
|||
|
add_action( 'wp_enqueue_scripts', array(__CLASS__, 'enqueue_script') );
|
|||
|
|
|||
|
// text domain
|
|||
|
//if ( is_admin() )
|
|||
|
// add_action('plugins_loaded', array(__CLASS__, 'load_textdomain'));
|
|||
|
}
|
|||
|
|
|||
|
public static function load_textdomain() {
|
|||
|
load_plugin_textdomain( 'highlight-search-terms' );
|
|||
|
}
|
|||
|
|
|||
|
public static function add_url_filters() {
|
|||
|
if ( !is_admin() && self::have_search_terms() ) {
|
|||
|
add_filter('post_link', array(__CLASS__,'append_search_query') );
|
|||
|
add_filter('post_type_link', array(__CLASS__,'append_search_query') );
|
|||
|
add_filter('page_link', array(__CLASS__,'append_search_query') );
|
|||
|
// for bbPress search result links
|
|||
|
add_filter('bbp_get_topic_permalink', array(__CLASS__,'append_search_query') );
|
|||
|
add_filter('bbp_get_reply_url', array(__CLASS__,'append_search_query') );
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public static function append_search_query( $url ) {
|
|||
|
// we need in_the_loop() check here to prevent apending query to menu links. But it breaks bbPress url support...
|
|||
|
if ( in_the_loop() && self::have_search_terms() ) {
|
|||
|
$url = add_query_arg('hilite', urlencode( "'" . implode("','",self::$search_terms) . "'" ), $url);
|
|||
|
}
|
|||
|
return $url;
|
|||
|
}
|
|||
|
|
|||
|
public static function enqueue_script() {
|
|||
|
// abort if no search the_terms
|
|||
|
if ( ! self::have_search_terms() ) return;
|
|||
|
|
|||
|
if ( defined('WP_DEBUG') && true == WP_DEBUG )
|
|||
|
wp_enqueue_script( 'hlst-extend', plugins_url('hlst-extend.js', __FILE__), array('jquery'), self::$version, true );
|
|||
|
else
|
|||
|
wp_enqueue_script( 'hlst-extend', plugins_url('hlst-extend.min.js', __FILE__), array('jquery'), self::$version, true );
|
|||
|
|
|||
|
$script = '/* Highlight Search Terms ' . self::$version . ' ( RavanH - http://status301.net/wordpress-plugins/highlight-search-terms/ ) */' . PHP_EOL;
|
|||
|
$script .= 'var hlst_query = ';
|
|||
|
$script .= wp_json_encode( (array) self::$search_terms );
|
|||
|
$script .= '; var hlst_areas = ' . wp_json_encode( (array) self::$areas) . ';';
|
|||
|
wp_add_inline_script( 'hlst-extend', $script, 'before' );
|
|||
|
}
|
|||
|
|
|||
|
public static function sanitize_terms( $search ) {
|
|||
|
$sanitized = array();
|
|||
|
|
|||
|
foreach( $search as $term ) {
|
|||
|
$sanitized[] = wp_strip_all_tags( $term );
|
|||
|
}
|
|||
|
|
|||
|
return $sanitized;
|
|||
|
}
|
|||
|
|
|||
|
public static function split_search_terms( $search ) {
|
|||
|
$return = array();
|
|||
|
|
|||
|
if ( preg_match_all( '/([^\s"\',\+]+)|"([^"]*)"|\'([^\']*)\'/', stripslashes( urldecode( $search ) ), $terms ) ) {
|
|||
|
foreach( $terms[0] as $term ) {
|
|||
|
$term = trim( str_replace( array( '"','\'','%22','%27' ), '', $term ) );
|
|||
|
if ( !empty($term) )
|
|||
|
$return[] = wp_strip_all_tags( $term );
|
|||
|
}
|
|||
|
}
|
|||
|
return $return;
|
|||
|
}
|
|||
|
|
|||
|
private static function have_search_terms() {
|
|||
|
// did we not look for search terms before?
|
|||
|
if ( !isset( self::$search_terms ) ) {
|
|||
|
// try regular parsed WP search terms
|
|||
|
if ( $searches = get_query_var( 'search_terms', false ) )
|
|||
|
self::$search_terms = self::sanitize_terms( $searches );
|
|||
|
// try for bbPress search or click-through from WP search results page
|
|||
|
elseif ( $search = get_query_var( 'bbp_search', false ) OR ( isset($_GET['hilite']) AND $search = $_GET['hilite'] ) )
|
|||
|
self::$search_terms = self::split_search_terms( $search );
|
|||
|
// nothing? then just leave empty array
|
|||
|
else
|
|||
|
self::$search_terms = array();
|
|||
|
}
|
|||
|
|
|||
|
return empty( self::$search_terms ) ? false : true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
HighlightSearchTerms::init();
|