WordPress

Niestandardowy bezpośredni link do wyszukiwania i stronicowania

  • 4 września, 2012
  • 3 min read
Niestandardowy bezpośredni link do wyszukiwania i stronicowania


@Chip Bennet pomógł mi w poprzednim pytaniu i opublikował całą swoją funkcję paginacji. Ta funkcja działa dla mnie doskonale, ale chciałbym mieć niestandardowe łącza bezpośrednie w języku niemieckim.

/**
 * Paginate Archive Index Page Links
 */
function oenology_get_paginate_archive_page_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','%#%'),
        'format' => '',
        'total' => $wp_query->max_num_pages,
        'current' => $current,
        'show_all' => false,
        'end_size' => $endsize,
        'mid_size' => $midsize,
        'type' => $type,
        'prev_text' => '<<',
        'next_text' => '>>'
    );

    if( $wp_rewrite->using_permalinks() )
        $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' );

    if( !empty($wp_query->query_vars['s']) )
        $pagination['add_args'] = array( 's' => get_query_var( 's' ) );

    return paginate_links( $pagination );
}

Używam tej funkcji w moim search.php taki szablon.

<div class="pagination">
    <?php echo oenology_get_paginate_archive_page_links(); ?>
</div>

Jeśli wyszukuję w moim pasku wyszukiwania, adres URL wynikowej strony wygląda tak

Warto przeczytać!  przekierowanie — Jak zmienić domyślny link do wylogowania w administratorze WordPress

mysite.com/?s=term

Chciałbym mieć niemiecki suche (oznacza „szukaj”) zamiast…

mysite.com/suche/term

I drugi bit… po kliknięciu na stronę 2 paginacji url wygląda obecnie tak…

mysite.com/page/2/?s=term

Chciałbym mieć niemieckie słowo, niemieckie słowo seite (dla „strony”) zamiast tego. Może nawet tak…

mysite.com/suche/term/seite/2

Czy jest to w jakiś sposób możliwe dzięki tej funkcji dostarczonej przez @Chip? Wydaje mi się, że nie mogę znaleźć działającego rozwiązania tego problemu.

Z góry dziękuję. Naprawdę byłbym wdzięczny za pomoc.


AKTUALIZACJA

function oenology_get_paginate_archive_page_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','%#%'),
        'format' => '?paged=%#%',
        'total' => $wp_query->max_num_pages,
        'current' => $current,
        'show_all' => false,
        'end_size' => $endsize,
        'mid_size' => $midsize,
        'type' => $type,
        'prev_next'    => false
    );

    if ( $wp_rewrite->using_permalinks() )
        $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'seite/%#%/', 'paged' );

    /*if ( !empty($wp_query->query_vars['s']) )
            $pagination['add_args'] = array( 's' => get_query_var( 's' ) );*/

    return paginate_links( $pagination );
}

/**
 * Change search- & paginationbase
 */

add_action( 'generate_rewrite_rules', 'wr_generate_rewrite_rules' );

function wr_generate_rewrite_rules( $rewrite ) {
    $rewrite->rules = array_merge( array(
         'suche/([^/]+)(?:/seite/(\d+))?/?' => 'index.php?s=".$rewrite->preg_index(1)."&paged='.$rewrite->preg_index(2)
    ), $rewrite->rules );
}

add_filter( 'get_pagenum_link', 'wr_search_pagenum_link' );

function wr_search_pagenum_link( $link ) { 
    if ( !is_search() )
        return $link;

    // Attempt to parse the page number from the provided URL
    if ( !preg_match( '#/page/(\d+)#', $link, $matches ) )
        return $link;

    // Return a re-formed URL
    return home_url( '/suche/' . urlencode( get_query_var( 's' ) ) . '/seite/' . $matches[0] );
}


Źródło

Warto przeczytać!  wp query - Wiele WP_Query z paginacją pokazuje zawartość strony/2 na pozostałych stronach