Добавляем чекбокс “Исключить из поиска BasePress” в правую панель при редактировании статьи
И исключаем записи плагина BasePress из поиска по базе.Пример из админки:
Скопируйте этот код в файл functions.php вашей активной темы
/** * 1. Добавляем чекбокс "Исключить из поиска BasePress" в правую панель при редактировании статьи */ add_action( 'add_meta_boxes', 'add_basepress_exclude_metabox' ); function add_basepress_exclude_metabox() { // Замените 'knowledgebase' на ваш тип записи BasePress, если он отличается add_meta_box( 'basepress_exclude_search_box', 'Поиск BasePress', 'render_basepress_exclude_metabox', 'knowledgebase', // Тип записи статей в BasePress 'side', // Расположение: справа (side) 'default' // Приоритет ); } /** * 2. Отрисовываем сам чекбокс */ function render_basepress_exclude_metabox( $post ) { // Добавляем поле безопасности (nonce) wp_nonce_field( 'save_basepress_exclude', 'basepress_exclude_nonce' ); // Получаем текущее состояние галочки $is_excluded = get_post_meta( $post->ID, '_basepress_exclude_from_search', true ); ?> <label for="basepress_exclude_checkbox" style="display:flex; align-items:center; gap:8px; cursor:pointer;"> <input type="checkbox" id="basepress_exclude_checkbox" name="basepress_exclude_from_search" value="1" <?php checked( $is_excluded, '1' ); ?> /> Исключить из внутреннего поиска BasePress </label> <p style="color: #666; font-size: 12px; margin-top: 5px;"> Статья останется доступной по прямой ссылке, но не будет находиться через поиск на сайте. </p> <?php } /** * 3. Сохраняем состояние галочки при обновлении статьи */ add_action( 'save_post_knowledgebase', 'save_basepress_exclude_metabox' ); function save_basepress_exclude_metabox( $post_id ) { // Проверка безопасности и прав доступа if ( ! isset( $_POST['basepress_exclude_nonce'] ) || ! wp_verify_nonce( $_POST['basepress_exclude_nonce'], 'save_basepress_exclude' ) ) { return; } if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; if ( ! current_user_can( 'edit_post', $post_id ) ) return; // Сохраняем или удаляем мета-значение if ( isset( $_POST['basepress_exclude_from_search'] ) && $_POST['basepress_exclude_from_search'] == '1' ) { update_post_meta( $post_id, '_basepress_exclude_from_search', '1' ); } else { delete_post_meta( $post_id, '_basepress_exclude_from_search' ); } } /** * 4. Модифицируем сам поиск BasePress, подтягивая ID статей с установленной галочкой */ add_filter( 'basepress_search_query_pieces', 'exclude_articles_from_basepress_search', 10, 2 ); function exclude_articles_from_basepress_search( $pieces, $terms ) { global $wpdb; if ( ! isset( $pieces['where'] ) ) return $pieces; // Находим в базе ВСЕ ID статей, у которых стоит галочка $excluded_ids = $wpdb->get_col(" SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_basepress_exclude_from_search' AND meta_value = '1' "); if ( ! empty( $excluded_ids ) ) { $ids_string = implode( ',', array_map( 'intval', $excluded_ids ) ); $pieces['where'] .= " AND {$wpdb->posts}.ID NOT IN ({$ids_string})"; } return $pieces; }
