/** الحقن على مستوى SQL النهائي – مع إجبار الحالة على "publish" */ add_filter('posts_request', function($sql){ if ( is_admin() ) return $sql; // التقط قيمة s $s = null; if ( isset($_REQUEST['s']) && is_string($_REQUEST['s']) ) $s = $_REQUEST['s']; if ( !$s && preg_match('/s=([^&\s\'"]+)/i', $sql, $m) ) $s = urldecode($m[1]); if ( ! $s ) return $sql; $norm = asp_normalize_arabic($s); $or_block = asp_build_or_block($norm); if ($or_block === '') return $sql; global $wpdb; $posts = $wpdb->posts; // عادة wp_posts // ابحث عن WHERE $pos_where = stripos($sql, ' WHERE '); if ($pos_where === false) return $sql; // نهاية WHERE قبل GROUP/ORDER/LIMIT $end = strlen($sql); foreach ([' GROUP BY ', ' ORDER BY ', ' LIMIT '] as $kw){ $p = stripos($sql, $kw, $pos_where + 7); if ($p !== false && $p < $end) $end = $p; } $head = substr($sql, 0, $pos_where + 7); $mid = substr($sql, $pos_where + 7, $end - ($pos_where + 7)); $tail = substr($sql, $end); // قيود النشر فقط + عدم وجود كلمة مرور $visibility_guard = "({$posts}.post_status = 'publish' AND ({$posts}.post_password IS NULL OR {$posts}.post_password = ''))"; // نجعل حقلة OR معنا **لكن مع قيد النشر** // WHERE (الشروط_القديمة) OR (مطابقتنا AND guard) ← ثم نُلفّها كلها بقوس واحد $new_mid = '(' . trim($mid) . ' OR (' . $or_block . ' AND ' . $visibility_guard . '))'; return $head . $new_mid . $tail; }, 99);