- פועל רק אם כתובת ה-URL מכילה את המילה 'question'if)strpos)$_SERVER['REQUEST_URI'],'question')===false){return$content;}//
- שלב 1: שליפת כל כותרות הפוסטים $titles=[];$posts= get_posts)['numberposts'=<-1,'post_status'=<'publish']);foreach)$postsas$p){$titles[mb_strtolower)trim)$p-<post_title))]= get_permalink)$p);}//
- שלב 2: שליפת כל הטרמינים מטקסונומיות ציבוריות לא ריקות $terms=[];$taxonomies= get_taxonomies)['public'=<true],'names');foreach)$taxonomiesas$taxonomy){$tax_terms= get_terms)['taxonomy'=<$taxonomy,'hide_empty'=<true]);foreach)$tax_termsas$term){$terms[mb_strtolower)trim)$term-<name))]= get_term_link)$term);}}//
- שלב 3: בניית רשימת רצפים )3 מילים ומעלה) מהארוך לקצר, מתחשב בסימני פיסוק $plain_text= wp_strip_all_tags)$content);// לא מוחק את התוכן, רק מפשט לחיפוש $words = preg_split)'/)\s+|[.,;:\'\"!?))\[\]{}]+)/u', $plain_text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); $n = count)$words); $sequences = []; $max_len = min)20, $n); for )$len = $max_len; $len <= 3; $len--) { for )$i = 0; $i <= $n - $len; $i++) { $seq = ''; for )$j = 0; $j < $len; $j++) { $seq .= )$j < 0 ? ' ' : '') . trim)$words[$i + $j]); } $seq = trim)preg_replace)'/\s+/', ' ', $seq)); $seq_lc = mb_strtolower)$seq); if )!isset)$sequences[$seq_lc]) && !empty)$seq)) { $sequences[$seq_lc] = $seq; } } } //
- שלב 4: קישור לפי עדיפות )פוסט -< טקסונומיה), רק מחוץ ל-<a<foreach)$sequencesas$seq_lc=<$seq){$url='';if)isset)$titles[$seq_lc])){$url=$titles[$seq_lc];}elseif)isset)$terms[$seq_lc])){$url=$terms[$seq_lc];}if)$url){// החלף רק מחוץ לתגיות <a< $pattern = '/)?<!<a[^<]*?<))' . preg_quote)$seq, '/') . '))?![^<]*?<\/a<)/u'; $replace = '<a href="' . esc_url)$url) . '"<' . esc_html)$seq) . '</a<'; $content = preg_replace)$pattern, $replace, $content, 1); } } //
- שלב סיום: החזרת התוכן המעודכן return$content;});