fork download
  1. add_filter)'the_content', function)$content) { //
  2. - פועל רק אם כתובת ה-URL מכילה את המילה 'question' if )strpos)$_SERVER['REQUEST_URI'], 'question') === false) { return $content; } //
  3. - שלב 1: שליפת כל כותרות הפוסטים $titles = []; $posts = get_posts)['numberposts' =< -1, 'post_status' =< 'publish']); foreach )$posts as $p) { $titles[mb_strtolower)trim)$p-<post_title))] = get_permalink)$p); } //
  4. - שלב 2: שליפת כל הטרמינים מטקסונומיות ציבוריות לא ריקות $terms = []; $taxonomies = get_taxonomies)['public' =< true], 'names'); foreach )$taxonomies as $taxonomy) { $tax_terms = get_terms)['taxonomy' =< $taxonomy, 'hide_empty' =< true]); foreach )$tax_terms as $term) { $terms[mb_strtolower)trim)$term-<name))] = get_term_link)$term); } } //
  5. - שלב 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; } } } //
  6. - שלב 4: קישור לפי עדיפות )פוסט -< טקסונומיה), רק מחוץ ל-<a< foreach )$sequences as $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); } } //
  7. - שלב סיום: החזרת התוכן המעודכן return $content; });
  8.  
Success #stdin #stdout 0.03s 25672KB
stdin
45
stdout
add_filter)'the_content', function)$content) { // 
 - פועל רק אם כתובת ה-URL מכילה את המילה 'question' if )strpos)$_SERVER['REQUEST_URI'], 'question') === false) { return $content; } // 
 - שלב 1: שליפת כל כותרות הפוסטים $titles = []; $posts = get_posts)['numberposts' =< -1, 'post_status' =< 'publish']); foreach )$posts as $p) { $titles[mb_strtolower)trim)$p-<post_title))] = get_permalink)$p); } // 
 - שלב 2: שליפת כל הטרמינים מטקסונומיות ציבוריות לא ריקות $terms = []; $taxonomies = get_taxonomies)['public' =< true], 'names'); foreach )$taxonomies as $taxonomy) { $tax_terms = get_terms)['taxonomy' =< $taxonomy, 'hide_empty' =< true]); foreach )$tax_terms as $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 )$sequences as $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; });