root/google-highlight/trunk/google-hilite.php @ 204

Revision 204, 3.7 KB (checked in by matt, 5 years ago)

Adding Google Highlight

Line 
1<?php
2/*
3Plugin Name: Search Hilite
4Plugin URI: http://wordpress.org/#
5Description: When someone is referred from a search engine like Google, Yahoo, or WordPress' own, the terms they search for are highlighted with this plugin. Packaged by <a href="http://photomatt.net/">Matt</a>.
6Version: 1.2
7Author: Ryan Boren
8Author URI: http://boren.nu
9*/ 
10
11/* Highlighting code c/o Ryan Boren */
12function get_search_query_terms($engine = 'google') {
13        $search = get_query_var('s');
14        $search_terms = get_query_var('search_terms');
15
16        $referer = urldecode($_SERVER['HTTP_REFERER']);
17        $query_array = array();
18        switch ($engine) {
19        case 'google':
20                // Google query parsing code adapted from Dean Allen's
21                // Google Hilite 0.3. http://textism.com
22                $query_terms = preg_replace('/^.*q=([^&]+)&?.*$/i','$1', $referer);
23                $query_terms = preg_replace('/\'|"/', '', $query_terms);
24                $query_array = preg_split ("/[\s,\+\.]+/", $query_terms);
25                break;
26
27        case 'lycos':
28                $query_terms = preg_replace('/^.*query=([^&]+)&?.*$/i','$1', $referer);
29                $query_terms = preg_replace('/\'|"/', '', $query_terms);
30                $query_array = preg_split ("/[\s,\+\.]+/", $query_terms);
31                break;
32
33        case 'yahoo':
34                $query_terms = preg_replace('/^.*p=([^&]+)&?.*$/i','$1', $referer);
35                $query_terms = preg_replace('/\'|"/', '', $query_terms);
36                $query_array = preg_split ("/[\s,\+\.]+/", $query_terms);
37                break;
38
39    case 'wordpress':
40        // Check the search form vars if the search terms
41        // aren't in the referer.
42        if ( ! preg_match('/^.*s=/i', $referer)) {
43            if (!empty($search_terms)) {
44                $query_array = $search_terms;
45            } else if (isset($search)) {
46                $query_array = array($search);
47            }
48
49            break;
50        }
51
52                $query_terms = preg_replace('/^.*s=([^&]+)&?.*$/i','$1', $referer);
53                $query_terms = preg_replace('/\'|"/', '', $query_terms);
54                $query_array = preg_split ("/[\s,\+\.]+/", $query_terms);
55        break;
56        }
57
58        return $query_array;
59}
60
61function is_referer_search_engine($engine = 'google') {
62        $siteurl = get_settings('home');
63    if( empty($_SERVER['HTTP_REFERER']) ) {
64        return 0;
65    }
66        $referer = urldecode($_SERVER['HTTP_REFERER']);
67    //echo "referer is: $referer<br />";
68        if ( ! $engine ) {
69                return 0;
70        }
71
72        switch ($engine) {
73        case 'google':
74                if (preg_match('|^http://(www)?\.?google.*|i', $referer)) {
75                        return 1;
76                }
77                break;
78
79    case 'lycos':
80                if (preg_match('|^http://search\.lycos.*|i', $referer)) {
81                        return 1;
82                }
83        break;
84
85    case 'yahoo':
86                if (preg_match('|^http://search\.yahoo.*|i', $referer)) {
87                        return 1;
88                }
89        break;
90
91    case 'wordpress':
92        if (preg_match("#^$siteurl#i", $referer)) {
93            return 1;
94        }
95        break;
96        }
97
98        return 0;
99}
100
101function hilite($text) {
102        $search_engines = array('wordpress', 'google', 'lycos', 'yahoo');
103
104        foreach ($search_engines as $engine) {
105                if ( is_referer_search_engine($engine)) {
106                        $query_terms = get_search_query_terms($engine);
107                        foreach ($query_terms as $term) {
108                                if (!empty($term) && $term != ' ') {
109                    $term = preg_quote($term, '/');
110                                        if (!preg_match('/<.+>/',$text)) {
111                                                $text = preg_replace('/(\b'.$term.'\b)/i','<span class="hilite">$1</span>',$text);
112                                        } else {
113                                                $text = preg_replace('/(?<=>)([^<]+)?(\b'.$term.'\b)/i','$1<span class="hilite">$2</span>',$text);
114                                        }
115                                }
116                        }
117                        break;
118                }
119        }
120
121        return $text;
122}
123
124function hilite_head() {
125        echo "
126<style type='text/css'>
127.hilite {
128        color: #fff;
129        background-color: #f93;
130}
131</style>
132";
133}
134
135// Highlight text and comments:
136add_filter('the_content', 'hilite');
137add_filter('comment_text', 'hilite');
138add_action('wp_head', 'hilite_head');
139
140?>
Note: See TracBrowser for help on using the browser.