Postări paginate - cum să folosești numere și linkuri anterioare/următoare?
Vreau ca wp_link_pages (postări multi-pagina) să afișeze numerele paginilor, cuvântul "anterior" înaintea acestor numere și "următor" după acestea. Ar trebui să arate astfel:
Anterior 1, 2, 3, 4 Următor
Încerc să fac asta fără un plugin. Iată ce am încercat până acum, dar nu funcționează, afișează doar numere.
<?php wp_link_pages(array(
'before' => '<span style="clear:both; display:block">Pagini',
'after' => '</span>',
'next_or_number'=>'number',
'previouspagelink' => 'Anterior',
'nextpagelink'=> 'Următor'
)); ?>

Funcția pe care o folosiți, wp_link_pages
Codex, nu are implicit funcționalitatea pe care o căutați.
Totuși, o puteți extinde ușor folosind o funcție callback, înregistrată ca un filtru pe argumentele acelei funcții:
add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');
Filtrul va modifica apoi parametrii folosiți în acea funcție din mers și va injecta linkurile lipsă pentru argumentele prev
și next
, care sunt afișate în stânga și dreapta listei numerotate de linkuri (next_or_number' => 'number'
):
/**
* Adaugă linkuri prev și next la o listă numerotată de pagini
*/
function wp_link_pages_args_prevnext_add($args)
{
global $page, $numpages, $more, $pagenow;
if ($args['next_or_number'] !== 'next_and_number')
return $args; # ieșire anticipată
$args['next_or_number'] = 'number'; # păstrează numerotarea pentru partea principală
if (!$more)
return $args; # ieșire anticipată
if ($page - 1) # există o pagină anterioară
$args['before'] .= _wp_link_page($page-1)
. $args['link_before']. $args['previouspagelink'] . $args['link_after'] . '</a>'
;
if ($page < $numpages) # există o pagină următoare
$args['after'] = _wp_link_page($page+1)
. $args['link_before'] . ' ' . $args['nextpagelink'] . $args['link_after'] . '</a>'
. $args['after']
;
return $args;
}
Utilizare:
wp_link_pages(array(
'before' => '<p>' . __('Pagini:'),
'after' => '</p>',
'next_or_number' => 'next_and_number', # activează supraîncărcarea parametrilor
'nextpagelink' => __('Următorul'),
'previouspagelink' => __('Anterior'),
'pagelink' => '%',
'echo' => 1 )
);
Dacă tema dvs. folosește întotdeauna linkurile prev și next, atunci ați putea modifica puțin funcția pentru a face acest comportament implicit ori de câte ori este folosit number
(valoarea implicită), astfel încât să scrieți mai puțin în temele voastre.
Aceasta este o implementare ușor diferită față de sugestia Velvet Blues.

Cu excepția câtorva comentarii și returnări premature, implementarea, numele opțiunii și explicația sunt exact la fel ca ale mele. Nu cumva omit ceva? Ce beneficiu aduce soluția ta? Mulțumesc.

Soluția lui Hakre este disponibilă atât timp cât întrebarea este aici. Răspunsurile complete (= ușor de înțeles fără a depinde de surse externe) sunt întotdeauna preferate pe StackExchange.

Diferența este că @hakre a introdus o eroare. În această linie de cod: if (!$args['next_or_number'] == 'next_and_number') îi lipsesc parantezele, așa că $args este negat înainte de evaluarea sa logică, ar trebui să fie: if (!($args['next_or_number'] == 'next_and_number')) sau mai bine if($args['next_or_number']!='next_and_number')

Funcția wp_link_pages()
afișează doar fie text, fie numere, niciodată ambele. Dacă analizezi codul funcției, vei observa că nu există nicio opțiune de a-i schimba comportamentul prin transmiterea de parametri.
Cu toate acestea, există trei metode de a realiza acest lucru fără a folosi un plugin:
- Creează propria funcție în fișierul functions.php al temei tale. Funcționează, dar vei avea o funcție nouă.
- Folosește 2-3 instanțe ale funcției
wp_link_pages()
. O soluție ineficientă. - Folosește un filtru. Metoda recomandată. Vezi mai jos.
Am scris un articol pe blogul meu despre cum să faci acest lucru. În esență, folosesc filtrul wp_link_pages_args și adaug o funcție în fișierul functions.php care introduce o nouă opțiune 'next_and_number'.
WordPress Hack: Afișează Numere & Linkuri Următor/Anterior cu wp_link_pages()

cum putem gestiona? https://wordpress.org/support/topic/how-to-manage-wp_link_pages-number-to-own-custom-url?replies=2
sau cum să adăugăm un titlu dinamic personalizat înaintea numărului de pagină.

Nu înțeleg care e problema... Ai vreo eroare?
Ar trebui să funcționeze:
<?php $args = array(
'before' => '<span style="clear:both; display:block">Pagini',
'after' => '</span>',
'nextpagelink' => __('Următoarea'),
'previouspagelink' => __('Precedenta')
);
wp_link_pages($args);
?>
Nu este nevoie să adaugi next_or_number deoarece number este deja valoarea implicită.

Din nu știu ce motiv, acest lucru nu funcționează, dar mie mi se pare corect. Mă întreb dacă s-a schimbat ceva în versiunea 3.3 sau dacă trebuie să adaug ceva în fișierul functions.php?

Da, am încercat și eu asta, funcționează când setezi next_or_number
la next
. Dar afișează doar linkurile 'Next' și 'Previous', nu și numerele!

Acest cod se află în bucla de articole? Codarea mi se pare în regulă. Iată exemplul din Codex despre cum să-l folosești:
<?php
wp_link_pages(array(
'before' => '<p>' . __('Pagini:'),
'after' => '</p>',
'next_or_number' => 'number',
'nextpagelink' => __('Pagina următoare'),
'previouspagelink' => __('Pagina anterioară'),
'pagelink' => '%',
'echo' => 1 )
);
?>

Răspunsul este diferit, dar a fost inspirat de @荒野无灯 care a decis să-și șteargă răspunsul. În opinia mea, este cel mai bun, ca soluție cea mai ușoară și flexibilă:
Soluția se bazează pe paginate_links()
. Singurul lucru de știut este că base
va fi URL-ul de la început, la care se adaugă %_%
, care va fi apoi înlocuit cu format
. Deci, atâta timp cât folosim get_permalink().'%_%';
, știm că vom rămâne în orice caz pe postarea curentă. În interiorul format
, #
este înlocuit cu numărul paginii:
function wpse37256_paginate_paged()
{
if ( ! $paginate_links = paginate_links( array(
'type' => 'array'
,'total' => $GLOBALS['numpages']
,'mid_size' => 1
,'end_size' => 1
#,'prev_next' => false
,'prev_text' => '« '.__( 'Prev', 'your_textdomain' )
,'next_text' => __( 'Next', 'your_textdomain' ).' »'
,'base' => get_permalink().'%_%'
,'format' => user_trailingslashit( '%#%' )
,'current' => $GLOBALS['page']
) ) )
return;
echo "<div class='pagination-container'>{$paginate_links}</div>";
}
