Досить постійні посилання на результати пошуку з додатковими варіантами запитів


10

Я хотів би знати , як я можу переписати URL пошуку , який також містить додатковий вар запиту в досить Permalink використанні wp_redirectі template_redirectгачок.

Я взяв код із плагіну Nice Search, який добре працює, щоб змінити http://example.com?s=africaйого http://example.com/search/africa:

add_action( 'template_redirect', 'my_rewrite' ) );

function my_rewrite() {

        if ( is_search() and false === strpos( $_SERVER['REQUEST_URI'], '/search/' ) ) {
            wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) );
            exit();
        }

    }

Але я використовую випадаюче меню у поєднанні з плагіном Relevanssi, щоб дозволити відвідувачам звузити пошук до певного типу публікації. До цього додається post_typevar запиту, наприклад http://example.com?s=africa&post_type=features. Я хотів би, щоб ця URL-адреса мала щось подібне http://example.com/search/africa/section/features.

Код Nice Search приводить до втрати варі запиту після_типу. Тому я спробував наступний код:

function my_rewrite() {

    if ( is_search() and false === strpos( $_SERVER['REQUEST_URI'], '/search/' ) ) {
        if ( isset( $_GET['post_type'] ) and '' !== $_GET['post_type'] ) {
            wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) . '/section/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 'post_type' ) ) ) );
        } else {
            wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) );
        }
        exit();
    }

}

але WordPress вважає, що пошуковий термін є africa/section/features.

Чи є спосіб я зберегти пошуковий термін і варі за запитом все в хорошій постійній посилання?

Спасибі Саймон

Відповіді:


7

Для зміни правил перезапису пошуку можна підключити до search_rewrite_rulesфільтра. Ви можете самостійно додати додаткові правила перезапису, які відповідають типам публікацій, або ви можете змінити типову структуру перезапису пошуку за замовчуванням, щоб вона також включала тип публікації, а потім повторно генерувала правила (є чотири правила: одне стандартне, одне із пейджингом і два для годувань). Оскільки WP_Rewrite::generate_rewrite_rules() генерує правила на кожному «рівні каталогів» , ви отримаєте правила /search/[keyword]/section/[post_type]/, /search/[keyword]/section/і /search/[keyword]/. Вам не потрібно середнього правила, але це не завадить тримати його.

add_filter( 'search_rewrite_rules', 'wpse15418_search_rewrite_rules' );
function wpse15418_search_rewrite_rules( $search_rewrite_rules )
{
    global $wp_rewrite;
    $wp_rewrite->add_rewrite_tag( '%post_type%', '([^/]+)', 'post_type=' );
    $search_structure = $wp_rewrite->get_search_permastruct();
    return $wp_rewrite->generate_rewrite_rules( $search_structure . '/section/%post_type%', EP_SEARCH );
}

Щоб перевірити правила, використовуйте мій плагін Аналізатор переписати .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.