Jolis liens permanents pour les résultats de recherche avec une requête supplémentaire var

10

J'aimerais savoir comment réécrire une URL de recherche qui contient également une requête supplémentaire var en un lien permanent permanent en utilisant wp_redirect et le crochet template_redirect .

J'ai pris le code du plug-in Nice Search qui fonctionne correctement pour changer http://example.com?s=africa en 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();
        }

    }

Mais j'utilise un menu déroulant de sélection en combinaison avec le plug-in Relevanssi pour permettre aux visiteurs de limiter la recherche à un type de message particulier. Ceci ajoute une variable post_type query var, par exemple. http://example.com?s=africa&post_type=features . Je voudrais que cette URL ait quelque chose comme http://example.com/search/africa/section/features .

Le code Nice Search provoque la perte de la requête post_type var. J'ai donc essayé le code suivant:

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();
    }

}

mais WordPress pense maintenant que le terme de recherche est africa/section/features .

Existe-t-il un moyen de conserver le terme de recherche et la requête dans un permalien agréable?

Merci Simon

    
posée Simon Blackbourn 23.04.2011 - 00:17

1 réponse

7

Pour modifier les règles de réécriture de la recherche, vous pouvez vous connecter au filtre search_rewrite_rules . Vous pouvez soit ajouter vous-même les règles de réécriture supplémentaires correspondant aux types de publication, soit modifier la "structure de réécriture de la recherche" par défaut afin d'inclure également le type de publication, puis de générer à nouveau les règles (il existe quatre règles: une standard, une avec pagination). et deux pour les aliments). Car WP_Rewrite::generate_rewrite_rules() génère des règles à chaque "niveau de répertoire" , vous obtiendrez des règles pour /search/[keyword]/section/[post_type]/ , /search/[keyword]/section/ et /search/[keyword]/ . Vous n'avez pas besoin de la règle du milieu, mais cela ne fera pas de mal de la garder.

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 );
}

Pour vérifier les règles, utilisez mon plugin d'analyse Rewrite .

    
réponse donnée Jan Fabry 04.06.2011 - 14:10

Lire d'autres questions sur les étiquettes