Bağlama bağlı olarak sayfa başına farklı yayın sayısı gösterin (ör. Ana sayfa, arama, arşivleme)


21

Okuma Ayarlarında, tüm bağlamlarda gösterilen yazı sayısını etkileyen yazı sayısını ayarlamak için bir yer vardır. Bunun yerine ana sayfada belirli sayıda yayın ve arşiv, arama sonuçları vb. Sayfalarda farklı sayıda yayın göstermek istiyorum.

Okuma-settings-blog sayfaları-show--en-sayfa başına

Bunu tema dosyalarını düzenleyerek ve buradaki sorgu parametrelerini değiştirerek yapabileceğimin farkındayım, ancak basit bir ayar sayfasına daha kolay erişmeyi tercih ederim. Uzun zaman önce, bunu yapan bir eklentiye rastladım, ancak şimdi bulamıyorum.

Bunu yapmak için bir eklenti, hatta aynı şeyi yapmak için functions.php içinde koyabileceğim bir işlev bilen var mı?


Muhtemelen @ chip- bennett'in 'Sayfa Başına Farklı Mesajlar' eklentisini düşünüyordunuz: chipbennett.net/plugins/cbnet-different-posts-per-page .
Tom Auger

Yanıtlar:


23

Bunu bir eklentide yapmanın en iyi yolunun aşağıdaki örnek işlevi çalıştırmak olduğuna inanıyorum: pre_get_posts eylem kancasıyla karşılaştığında . $wp_queryNesne, kullanılabilir olduğunu koşullu etiketler mevcuttur, yani ancak WordPress sorgu değişiyor vasıta mesajları, gelmeden önce çalıştırılmasını yerine query_posts () bir tema kullanıldığında gibi ikinci sorgu ekleyerek ilk sorguda öncesinde vars dosya.

function custom_posts_per_page($query) {
    if (is_home()) {
        $query->set('posts_per_page', 8);
    }
    if (is_search()) {
        $query->set('posts_per_page', -1);
    }
    if (is_archive()) {
        $query->set('posts_per_page', 25);
    } //endif
} //function

//this adds the function above to the 'pre_get_posts' action     
add_action('pre_get_posts', 'custom_posts_per_page');

Bu işlevi kendi sitemde kullanıyorum. Kesip senin için buraya yapıştırmak kolaydı.
kevtrout

0

query_posts kullanarak özel bir döngü yapabilir ve is_home, is_archive, vb.

query_posts ile birlikte sadece basit bir if ifadesi


Evet, sorumu söyledim. Bunu yapmak için bir yol arıyorum bu yüzden ayarları değiştirmek için birden fazla tema dosyalarını düzenlemek zorunda kalmıyorum. Teşekkürler.
Doug,

1
Bu şekilde yapmak oldukça kötü bir fikir. WordPress zaten sorgu çalıştırıyor. Temanıza eklerseniz query_posts, orijinal sorguyu yoksayır ve başka bir gereksiz hale getirirsiniz.
Krzysiek Dróżdż

-1

Bu soruya ekleyerek. Birisi bu işlev için post_per_page'in nasıl belirleneceğini biliyor mu?

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>

-1

Bunu tema dosyalarını düzenleyerek ve buradaki sorgu parametrelerini değiştirerek yapabileceğimin farkındayım, ancak basit bir ayar sayfasına daha kolay erişmeyi tercih ederim.

Bütünlüğün yararına, query_postsbirleştirme ile birlikte $query_stringçalışmanın iyi sonuç verdiğini gördüm .

Bu kodu yerleştirdim index.php(temamda category.php yok) ...

<?php 
if (!is_front_page()) { 
    query_posts($query_string . "&posts_per_page=20"); 
}
?>

Elbette burada yaptığımız şey, sayfa başına varsayılan yayın sayısını geçersiz kılarak, döngünün iç sorgu dizesini değiştirmektir .

Tam yazı gösterdiğim ana sayfada daha küçük bir yazı listesi ve yalnızca yazı özetleri gösterdiğim diğer her yerdeki (kategoriler, tarihe göre, vb.) Daha geniş bir yazı listesi sağlamak için kullanılır.

Ancak, kabul edilen cevabın tersine, bunun sorguyu iki kez çalıştıracağını , bu nedenle de bunun iyi bir çözüm olmadığını unutmayın.


Jeff, farklı bağlamlarda dönen gönderilerin sayısını kontrol etmek için merkezi bir yer arıyordum. Cevabınız, yalnızca çoğu temanın yapmadığı TÜM bağlamları işlemek için index.php kullanıyorsanız bunu yapar. Veritabanına yapılan çağrıları arttırmanın yanı sıra (performansı etkileyen) tekniğiniz de koşullu etiketlere (örneğin, is_home () veya is_front_page) beklenmeyen şekilde cevap verebilir. Son olarak, bir sayfaya ikincil döngüler eklemek istiyorsanız, query_posts kullanmamalısınız, bunun yerine "new WP_Query" kullanmalısınız (veya get_posts).
Doug,

@Bu ikincil bir döngü değil, ana döngüyü geçersiz kılıyor - ve evet, bu özel tema her şeyi yapmak için index.php kullanıyor, oldukça minimalist. Bunun bir cevap olarak daha mantıklı geldiğini hissettim, ancak istersem kendi soruma sorabilir ve bu cevap sizi bir şekilde rahatsız ederse cevaplayabilirim.
Jeff Atwood

Aslında ikinci-son paragrafınızı yanlış okudum ve "daha büyük" ve "daha küçük" yazı listelerinin aynı sayfada olduğunu düşündüm, bu yüzden yukarıdaki son cümlenim alakasızdı. Ve evet, isterseniz tüm kodunuzu index.php dosyasına koymak tamamen meşru. Ve eğer durum buysa, yönteminiz bunu yapmanın hızlı ve kolay bir yoludur, bu yüzden 20 saatlik kilitleme bittikten sonra olumsuz oyumu kaldıracağım. Öyle olsa bile, orijinal sorguyu kevtrout'un cevabında olduğu gibi değiştirmek yerine yeni bir sorgu göndermek, daha önce belirtilen nedenlerden dolayı daha az arzu edilir (siz, ben ve WP Kodeksi).
Doug,
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.