Sayfalı mesajlar - numaralar ve sonraki / önceki bağlantılar nasıl kullanılır?


17

Ben wp_link_pages (çok sayfalı mesajlar) sayfa numaralarını, bu numaralardan önce "önceki" ve bu numaralardan sonra "sonraki" görüntülemek için istiyorum. Şöyle görünecektir:

Önceki 1, 2, 3, 4 Sonraki

Bunu bir eklenti olmadan yapmaya çalışıyorum . İşte şimdiye kadar denedim, ama çalışmıyor, sadece sayıları gösteriyor.

<?php wp_link_pages(array(
    'before' => '<span style="clear:both; display:block">Pages', 
    'after'  => '</span>',
    'next_or_number'=>'number',
    'previouspagelink' => 'previous',
    'nextpagelink'=> 'Next'
)); ?>

Yanıtlar:


12

Kullandığınız işlev olan wp_link_pagesCodex , varsayılan olarak aradığınız özelliğe sahip değil.

Ancak , bu işlev bağımsız değişkenlerine filtre olarak kaydedilmiş bir geri arama işlevi kullanarak kolayca genişletebilirsiniz :

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

O işlevde kullanılan parametreleri değiştirilir filtre on-the-fly ve kayıp halka enjekte prevve nextsol ve sağ tarafında çıkış olan argümanlar sayılı bağlantı listesindeki ( next_or_number' => 'number'):

/**
 * Add prev and next links to a numbered page link list
 */
function wp_link_pages_args_prevnext_add($args)
{
    global $page, $numpages, $more, $pagenow;

    if (!$args['next_or_number'] == 'next_and_number') 
        return $args; # exit early

    $args['next_or_number'] = 'number'; # keep numbering for the main part
    if (!$more)
        return $args; # exit early

    if($page-1) # there is a previous page
        $args['before'] .= _wp_link_page($page-1)
            . $args['link_before']. $args['previouspagelink'] . $args['link_after'] . '</a>'
        ;

    if ($page<$numpages) # there is a next page
        $args['after'] = _wp_link_page($page+1)
            . $args['link_before'] . ' ' . $args['nextpagelink'] . $args['link_after'] . '</a>'
            . $args['after']
        ;

    return $args;
}

Kullanımı:

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'next_and_number', # activate parameter overloading
    'nextpagelink' => __('Next'),
    'previouspagelink' => __('Previous'),
    'pagelink' => '%',
    'echo' => 1 )
);

Temanız her zaman önceki ve sonraki bağlantıları kullanıyorsa, number(varsayılan) her kullanıldığında varsayılan davranışı yapmak için işlevi biraz değiştirebilirsiniz , bu nedenle temalarınıza daha az yazmanız gerekir.

Bu Velvet Blues tarafından önerildiği gibi biraz farklı bir uygulamadır .


Birkaç yorum ve erken iade dışında, uygulama, seçenek adı ve açıklama benimkiyle tamamen aynıdır. Bir şey mi görüyorum? Çözümünüz ne fayda sağlıyor? Teşekkürler.
Velvet Blues

Muhtemelen kodu karşılaştırdığımda.
hakre

Soru burada olduğu sürece Hakre'nin çözümü mevcut. StackExchange'te tam cevaplar (= harici kaynaklara güvenilmeden anlaşılabilir) her zaman tercih edilir.
fuxia

6

wp_link_pages()İşlevi yalnızca gösterir ya metin veya sayı, asla ikisi. Fonksiyonun koduna bakarsanız, parametreleri geçirerek farklı davranmasını sağlayacak bir seçenek olmadığını görürsünüz.

Bununla birlikte, bunu bir eklenti olmadan yapmanın üç yolu vardır:

  1. Temanızın function.php dosyasında kendi işlevinizi oluşturun. Çalışır, ama sonra yeni bir fonksiyonunuz olur.
  2. 2-3 kez kullanın wp_link_pages(). Çok verimsiz kesmek.
  3. Bir filtre kullanın. Tercih Edilen Yöntem . Aşağıya bakınız.

Bunu blogumda nasıl yapacağım hakkında bir makale yazdım. Temel olarak, wp_link_pages_args filtresini kullanıyorum ve yeni bir seçenek 'next_and_number' ekleyen function.php dosyasına bir işlev ekliyorum.

WordPress Hack: wp_link_pages () ile Sayı ve Sonraki / Önceki Bağlantıları Göster


Havalı adam ... 4 küresel değeri kullanan bir şey düşünüyordum, ama hiçbir zaman bir çözüme ulaşmadım ... +1!
Rutwick Gangurde

3

Bunu deneyin, daha fazla özelleştirebilirsiniz. Ama istediğin gibi yapmalı :-)

function tp_link_pages() {
    global $page, $numpages;

    echo paginate_links( array(
        'format' => get_permalink() . '%#%/',
        'current' => $page,
        'total' => $numpages
    ) );
}

nasıl yönetebiliriz? wordpress.org/support/topic/… veya sayfa numarasından önce dinamik özel başlığın nasıl ekleneceği.
ravi patel

1

Sorunun ne olduğunu anlamadım ... Hatanın var mı?

Bu çalışmalı:

<?php $args = array(
    'before'           => '<span style="clear:both; display:block">Pages',
    'after'            => '</span>',
    'nextpagelink'     => __('Next'),
    'previouspagelink' => __('Previous')
); 

wp_link_pages($args);
?> 

Sayı zaten varsayılan olduğundan next_or_number eklemeniz gerekmez.


Bir nedenden dolayı bu işe yaramıyor, ama benim için doğru görünüyor. 3.3'te bir değişiklik olup olmadığını veya bir şeye fonksiyonlara yapıştırmam gerekip gerekmediğini merak ediyorum.
AndrettiMilas

2
Evet seni ayarladığınızda çalıştığını, çok denedik next_or_numberiçin next. Ancak sayıları değil, yalnızca 'İleri' ve 'Önceki' bağlantılarını gösterir!
Rutwick Gangurde

1
Örnekte gösterildiği gibi her ikisine de ihtiyacım var.
AndrettiMilas

1

Bu kod yazı döngüsünde? Kodlama benim için sorun değil. İşte nasıl kullanılacağına dair Codex örneği:

<?php

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'number',
    'nextpagelink' => __('Next page'),
    'previouspagelink' => __('Previous page'),
    'pagelink' => '%',
    'echo' => 1 )
);

?>

Bu kod çalışmıyor.
AndrettiMilas

Kod düzeltildi. Afedersiniz. Bazı özniteliklerin değeri yoktur.
Caio Alves

1
Bu, sorumda aradığım sonuçları elde etmiyor, sadece sayıları gösteriyor.
AndrettiMilas

0

Cevap farklı, ama cevabını silmeye karar veren @ 荒野 无 灯'dan esinlenildi. En kolay ve esnek çözüm olarak en iyisi:

Çözüm buna bağlıdır paginate_links(). Bilmeniz gereken tek şey base, başlangıçtan itibaren URl olacak ve %_%bunun yerineformat . Kullandığımız sürece get_permalink().'%_%';, her halükarda mevcut yazıda kalacağımızı biliyoruz. İçeride format, #sayfa numarası ile değiştirilir:

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' => '&laquo; '.__( 'Prev', 'your_textdomain' )
        ,'next_text' => __( 'Next', 'your_textdomain' ).' &raquo;'

        ,'base'      => get_permalink().'%_%'
        ,'format'    => user_trailingslashit( '%#%' )

        ,'current'   => $GLOBALS['page']
    ) ) )
        return;

    echo "<div class='pagination-container'>{$paginate_links}</div>";
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.