View difference between Paste ID: mykzTmH1 and 1vPv2XSF
SHOW: | | - or go back to the newest paste.
1
Index: glossary.php
2
===================================================================
3
--- glossary.php	(revision 589602)
4
+++ glossary.php	(working copy)
5
@@ -84,6 +84,16 @@
6
 	}
7
 	add_action('wp_print_styles', 'red_glossary_css');
8
 		
9
+// Sort longer titles first, so if there is collision between terms (e.g., 
10
+// "essential fatty acid" and "fatty acid") the longer one gets created first.
11
+function sortByWPQueryObjectTitleLength($a, $b) {
12
+	$sortVal = 0;
13
+	if (property_exists($a, 'post_title') && property_exists($b, 'post_title')) {
14
+		$sortVal = strlen($b->post_title) - strlen($a->post_title);
15
+	}
16
+	return $sortVal;
17
+}
18
+
19
 function red_glossary_parse($content){
20
 
21
 	//Run the glossary parser
22
@@ -97,6 +107,9 @@
23
 											'orderby'		=> 'title'
24
 											));	
25
 											
26
+		// Sort by title length (function above)
27
+		uasort($glossary_index, 'sortByWPQueryObjectTitleLength');
28
+
29
 		//the tag:[glossary_exclude]+[/glossary_exclude] can be used to mark text will not be taken into account by the glossary
30
 		if ($glossary_index){
31
 			$timestamp = time();
32
@@ -262,6 +275,10 @@
33
 				//old code bug-doesn't take into account href='' takes into account only href="")
34
 				//$glossary_search = '/\b'.$glossary_title.'s*?\b(?=([^"]*"[^"]*")*[^"]*$)/i';
35
 				$glossary_search = '/\b'.$glossary_title.'s*?\b(?=([^"]*"[^"]*")*[^"]*$)(?=([^\']*\'[^\']*\')*[^\']*$)/i';
36
+				// If protected tags option is turned on, make sure we're not replacing terms that are already in anchor tags (esp. anchor tags generated by another glossary term)
37
+				if (get_option('red_glossaryProtectedTags') == 1) {
38-
+					$glossary_search = '/(?<!glossaryLink">)\b'.$glossary_title.'s*?\b(?=([^"]*"[^"]*")*[^"]*$)(?=([^\']*\'[^\']*\')*[^\']*$)(?!<\/a>)/i'; // PAR
38+
+					$glossary_search = '/(?<!glossaryLink">)\b'.$glossary_title.'s*?\b(?=([^"]*"[^"]*")*[^"]*$)(?=([^\']*\'[^\']*\')*[^\']*$)(?!<\/a>)/i';
39
+				}				
40
 				$glossary_replace = '<a'.$timestamp.'>$0</a'.$timestamp.'>';
41
 				
42
 				$origContent = $content;
43
@@ -298,17 +315,17 @@
44
 						}
45
 						
46
 							if (get_option('red_glossaryTermLink') == 1) {
47
-								$link_replace = '<span class="glossaryLink"  title="Glossary: '. $glossary_title . '" onmouseover="tooltip.show(\'' . $glossaryItemContent . '\');" onmouseout="tooltip.hide();">$1</span>';												
48
+								$link_replace = '<span title="Glossary: '. $glossary_title . '" onmouseover="tooltip.show(\'' . $glossaryItemContent . '\');" onmouseout="tooltip.hide();" class="glossaryLink">$1</span>';												
49
 							} else {
50
-								$link_replace = '<a class="glossaryLink" href="' . get_permalink($glossary_item) .'" title="Glossary: '. $glossary_title . '" onmouseover="tooltip.show(\'' . $glossaryItemContent . '\');" onmouseout="tooltip.hide();">$1</a>';												
51
+								$link_replace = '<a href="' . get_permalink($glossary_item) .'" title="Glossary: '. $glossary_title . '" onmouseover="tooltip.show(\'' . $glossaryItemContent . '\');" onmouseout="tooltip.hide();" class="glossaryLink">$1</a>';												
52
 							}
53
 
54
 					}
55
 					else {
56
 							if (get_option('red_glossaryTermLink') == 1) {
57
-									$link_replace = '<span class="glossaryLink"  title="Glossary: '. $glossary_title . '">$1</span>';
58
+									$link_replace = '<span title="Glossary: '. $glossary_title . '" class="glossaryLink">$1</span>';
59
 							} else {
60
-									$link_replace = '<a class="glossaryLink" href="' . get_permalink($glossary_item) . '" title="Glossary: '. $glossary_title . '">$1</a>';
61
+									$link_replace = '<a href="' . get_permalink($glossary_item) . '" title="Glossary: '. $glossary_title . '" class="glossaryLink">$1</a>';
62
 							}
63
 			
64
 					}