Après avoir essayé pendant des semaines maintenant de trouver une solution de travail, je me suis débarrassé de la plupart de mes fonctions et de mes essais et je viens de laisser la fonction de pagination en dessous dans mon fichier functions.phh:
/**
* Pagination links for search and archives
*/
function get_pagination_links( $type = 'plain', $endsize = 1, $midsize = 1 ) {
global $wp_query, $wp_rewrite;
$wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;
// Sanitize input argument values
if ( ! in_array( $type, array( 'plain', 'list', 'array' ) ) ) $type = 'plain';
$endsize = (int) $endsize;
$midsize = (int) $midsize;
// Setup argument array for paginate_links()
$pagination = array(
'base' => @add_query_arg('paged','%#%'),
'total' => $wp_query->max_num_pages,
'current' => $current,
'show_all' => false,
'end_size' => $endsize,
'mid_size' => $midsize,
'type' => $type,
'prev_next' => false,
'paged' => get_query_var( 'paged' )
);
return paginate_links( $pagination );
}
Mon formulaire de recherche ressemble à ceci:
<form class="search-form" action="<?php echo home_url( '/' ); ?>" method="get">
<fieldset>
<div class="input-inside-label">
<label for="s">Suchen …</label>
<input type="text" name="s" class="s" value="<?php the_search_query(); ?>" />
</div>
<button type="submit" class="search-button">Suchen</button>
</fieldset>
</form>
Ce que je veux faire: Je voudrais réécrire le /?s=
standard en Word allemand /suche
Donc, lors de la recherche de "test", je veux que mon URL ressemble à ceci: www.mydomain.com/suche/test
(au lieu de /?s=test
)
De plus, j'aimerais également réécrire la pagination… Donc, lorsque vous recherchez "test" et cliquez sur page 2
, j'aimerais que l'adresse ressemble à ceci…
www.mydomain.com/suche/test/seite/2
Donc, fondamentalement, j'aimerais réécrire /?s=
dans le mot allemand suche
(pour la recherche) et réécrire &paged=2
dans le mot allemand seite
(pour la page)
Comme vous pouvez le constater, tout ce que j’ai dans mon code à l’heure actuelle est la fonction de pagination ci-dessus, car j’ai supprimé tous les autres essais - j’ai semblé ne pas pouvoir le faire fonctionner.
Des idées intelligentes à ce sujet? J'utilise la dernière version de wordpress et j'aimerais trouver une solution basée sur les filtres. Je ne veux pas que JS interagisse avec le formulaire de recherche.
Merci d'avance
il y a 3 étapes pour atteindre votre objectif.
add_rewrite_rule( 'suche/([^/]+)/?$', 'index.php?s=$matches[1]', 'top' );
add_rewrite_rule( 'suche/([^/]+)(/seite/(\d+))/?$', 'index.php?s=$matches[1]&paged=$matches[3]', 'top' );
Ce qui précède ajoute des règles de réécriture directes au tableau de règles de réécriture afin que chaque fois que quelqu'un accède à une URL telle que /suche/apfel/
, celle-ci est traduite en interne sous la forme index.php?s=apfel
.
// redirect immediately
if ( isset( $_GET[ 's' ] ) ) {
$location = '/suche/' . $_GET[ 's' ];
if ( isset( $_GET[ 'paged' ] ) && $_GET[ 'paged' ] )
$location .= '/seite/' . $_GET[ 'paged' ];
wp_redirect( trailingslashit( home_url( $location ) ), 301 );
exit;
}
Placez ceci dans votre functions.php
. Dès qu'une requête de recherche est détectée, wordpress sera redirigé vers l'URL de recherche Nice et le navigateur se souviendra de la redirection en raison du statut 301
que nous passons à wp_redirect()
.
Nous construisons notre URL de remplacement pour une recherche ici, et si le paramètre $paged
est présent, nous l'ajoutons également.
function pagination_links( $type = 'plain', $endsize = 1, $midsize = 1 ) {
global $wp_query, $wp_rewrite;
$wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1;
// Sanitize input argument values
if ( ! in_array( $type, array( 'plain', 'list', 'array' ) ) ) $type = 'plain';
$endsize = (int) $endsize;
$midsize = (int) $midsize;
// Setup argument array for paginate_links()
$pagination = array(
'base' => home_url( '/suche/' . get_search_query() . '%_%' ),
'format' => '/seite/%#%/', // ?page=%#% : %#% is replaced by the page number
'total' => $wp_query->max_num_pages,
'current' => $current,
'show_all' => false,
'end_size' => $endsize,
'mid_size' => $midsize,
'type' => $type,
'prev_next' => false
);
return paginate_links( $pagination );
}
La seule chose qui vous manquait dans cette fonction utilisait les arguments modifiés format
et base
pour créer la base d'URL Nice de la recherche actuelle et l'argument de page URL Nice.
Cela devrait faire ce dont vous avez besoin. Vous pouvez creuser plus profondément et remapper plus d'URL pour utiliser des traductions en utilisant d'autres filtres, mais il y en a plusieurs, donc c'est un bon point de départ!