4.4'te kırılmış <! - nextpage -> ile içerik ekleme


14

Güncelleme 2016-01-21

Sonumdaki tüm güncel testler, 4.4.1'in yeni kurulumlarında aşağıdaki ayarlarla yapılıyor: Plain permalinks Twentysixteen Theme No plugins activated

Yayında yalnızca 1 sayfa varsa (yani yayında görünmüyorsa) <!--nextpage-->, fazladan sayfalar başarılı bir şekilde eklenir (birden fazla fazladan sayfa ekleseniz bile).

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

Gönderinin 2'den fazla sayfası varsa, fazladan sayfalar 404 ve standart olarak gönderinin 1. sayfasına yönlendirilir .

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

<!--nextpage-->

This is page 2

$wp_query->queried_objectEkstra sayfalara bastığınızda ikinci durumda boş olur. Bunu görmek için kurallı yönlendirmeyi devre dışı bırakmanız gerekirremove_filter('template_redirect', 'redirect_canonical');

Aşağıdaki çekirdek düzeltmelerin her ikisi de davranış değişikliği olmadan ayrı ayrı ve birlikte denenmiştir: https://core.trac.wordpress.org/ticket/35344#comment:16

https://core.trac.wordpress.org/ticket/35344#comment:34

Kullanım kolaylığı için bu şu anda test ettiğim kod:

add_action('template_redirect', 'custom_content_one');
function custom_content_one() {
    global $post;
    $content = "\n<!--nextpage-->\nThis is the extra page v1";
    $post->post_content .= $content;
}

add_filter('content_pagination', 'custom_content_two', 10, 2);
function custom_content_two($pages, $post) {
    if ( in_the_loop() && 'post' === $post->post_type ) {
        $content = "This is the extra page v2";

        $pages[] = $content;
    }
    return $pages;
}

add_action('the_post', 'custom_content_three');
function custom_content_three() {
    global $multipage, $numpages, $pages;
    $content = "This is the extra page v3";

    $multipage = 1;
    $numpages++;
    $pages[] = $content;
}

İsBu tek sayfalık bir yazıda birden fazla fazla sayfayı test etmek için kullandığım kod

add_action('template_redirect', 'custom_content_one');
function custom_content_one() {
    global $post;
    $content = "\n<!--nextpage-->\nThis is the extra page v1-1\n<!--nextpage-->\nThis is the extra page v1-2\n<!--nextpage-->\nThis is the extra page v1-3";
    $post->post_content .= $content;
}

Orijinal Soru

4.4'ten önce aşağıdakilerle birlikte bir çok sayfalı yazıya ek bir sayfa ekleyebildim:

add_action('template_redirect', 'custom_content');
function custom_content() {
    global $post;
    $content = html_entity_decode(stripslashes(get_option('custom_content')));
    $post->post_content .= $content;
}

Get_option ('custom_content') gibi bir şeyle:

<!--nextpage-->
Hello World

4.4 sürümüne yükseltme yapıldığından kod çalışmadı; ek sayfaya gitmek bir 404 hatası tetikler ve redirect_canonical bunları gönderinin kalıcı bağlantısına geri gönderir. Redirect_canonical özelliğini devre dışı bırakmak ekstra sayfayı görüntülememe izin veriyor ve ek içerik orada, ancak yine de bir 404 hatası tetikliyor.

Aşağıdakiler dahil 404 hatasını çözen bir dizi geçici çözümü denedim:

add_action('the_post', 'custom_content');
function custom_content() {
    global $multipage, $numpages, $pages;
    $content = html_entity_decode(stripslashes(get_option('custom_content')));

    $multipage = 1; // ensure post is considered multipage: needed for single page posts
    $numpages++; // increment number of pages
    $pages[] = $content;
}

Ayrıca 4.4'te eklenen yeni content_pagination filtresini kullanmayı denedi :

add_filter('content_pagination', 'custom_content', 10, 2);
function custom_content($pages, $post) {
    $content = html_entity_decode(stripslashes(get_option('custom_content')));

    $pages[] = $content;
    return $pages;
}

Bu noktada, bu işlevselliği nasıl geri yükleyeceğime dair fikirlerim bitti ve herhangi bir yardım takdir edilecektir.


Tamam, bu konuda bir güncellemem var, maalesef olumlu değil. Görünüşe göre, ekstra sayfa 2 ise yeni kurulumda çalışır. Ancak, ekstra sayfa sayfa 3 (veya daha yüksekse, o zaman kırılır). kol
Milamber

1
HATA BULUNDU !!!!! EVET!!!!. Cevabımı yakında güncelleyeceğim
Pieter Goosen

Yanıtlar:


8

GÜNCELLEME 21-01-2016 19:35 SA ZAMANI - HATA BULUNDU !!!!! EVET!!!!!!

Sonunda hatayı buldum. Son güncellemenizde belirttiğiniz gibi, hata yalnızca içerikte $post_contentbir <!--nextpage-->etiket olduğunda gerçekleşir . Test ettim ve sayfadan sonra başka bir sayfanın <!--nextpage-->404 döndürdüğünü ve ardından sayfanın ilk sayfaya geri yönlendirildiğini onayladım .

Bunun nedeni aşağıdaki kod satırları içinde handle_404()tanıtılan yöntem WPsınıfı WordPress 4.4'te

// check for paged content that exceeds the max number of pages
$next = '<!--nextpage-->';
if ( $p && false !== strpos( $p->post_content, $next ) && ! empty( $this->query_vars['page'] ) ) {
    $page = trim( $this->query_vars['page'], '/' );
    $success = (int) $page <= ( substr_count( $p->post_content, $next ) + 1 );
}

Bu kodun yaptığı, <!--nextpage-->etiketin ayarlandığı her seferinde post_content, content_paginationfiltre aracılığıyla içerikten sonra eklenen herhangi bir sayfaya erişildiğinde 404 değerini döndürür . Bir 404 ayarlandığından, redirect_canonical()eklenen tüm sayfaları ilk sayfaya geri yönlendirir

Bu konuyla ilgili olarak buradan kontrol edebileceğiniz bir trac bileti verdim

Yazarken henüz geri bildirim yoktu, bu yüzden biletin durumunu düzenli olarak kontrol ettiğinizden emin olun.

AKIM ÇÖZÜM - A / W TRAC BİLET BİLDİRİMİ

Şimdilik, gelecekteki sürümlerde herhangi bir geri bildirim ve olası düzeltmeler alana WPkadar, bir sonraki duyuruya kadar bu satırları sınıftan silin

NE ZAMAN BU ...... DEBUGGING ZAMANI !!!!!

Bunu tamamen test etmek için zamanım vardı. Kodunuzu aldım ve test ettim:

  • V4.3 yerel kurulumum

  • V4.4.0 yerel kurulumum

  • V4.4.1 yerel kurulumum

  • Yalnızca Hello Worldyazı ve Sample Pagesayfa ile yeni v4.4.1 yerel yüklemesini tamamlayın

kalıcı bağlantılarım

  • default ve

  • Post Name

İşte test yazımın içinde 4 sayfa oluşturmak için test kodum.

add_filter('content_pagination', 'custom_content', 10, 2);
function custom_content($pages, $post) {
    $pages_to_add = [
        'Hello World Page 2',
        'Hello World Page 3',
        'Hello World Page 4',
    ];

    foreach ( $pages_to_add as $page_to_add ){
        $pages[]  = html_entity_decode(
            stripslashes(
                $page_to_add
            )
        );
    }

    return $pages;
}

Ben de test ettim

add_filter('content_pagination', 'custom_content', 10, 2);
function custom_content($pages, $post) {
    $pages_to_add = [
        '<!--nextpage--> Hello World Page 2',
        '<!--nextpage--> Hello World Page 3',
        '<!--nextpage--> Hello World Page 4',
    ];

    foreach ( $pages_to_add as $page_to_add ){
        $pages[]  = html_entity_decode(
            stripslashes(
                $page_to_add
            )
        );
    }

    return $pages;
}

iyi önlem için

Her yükleme ve kalıcı bağlantı yapısında, tüm kodlarınız çalışır ( beklenen v4.3'te hariçcontent_pagination ).

Ayrıca Sample Pagestatik bir ön sayfa olarak ayarladım , ancak sayfa 2'de ORİJİNAL CEVAP ve ** DÜZENLEME bölümünde açıklandığı gibi hataya uyum olarak başarısız oldu

Sonuç olarak, bunun çekirdekteki hata veya çekirdekteki herhangi bir hata ile ilgisi yoktur. Yorumlardan, bir şey sayfalı yazı sayfalarında sorgulanan nesneyi kaldırıyor ve bu hata ayıklamamız gereken bir şey. Ne yazık ki bu sorun artık yerelleştiği için kesin çözümler veremiyorum.

SORUNUN BORÇLANMASI

Sorunu gidermek için aşağıdaki iş akışını kullanmanız gerekir

  • Kendinize çok miktarda şeker içeren büyük miktarda yüksek kafeinli kahve alın

  • Bir yedek al db

  • Aşağıdaki eklentileri indirin ve yükleyin ( Herhangi bir eklentiye bağlı değilim )

    • Nesneleri Hata Ayıkla Normal hata ayıklama için. Kurulduktan ve kurulduktan sonra, eklenti tarafından vurgulanabilecek tüm açık hataları onarın. Belirgin hatalarınız varsa bir sonraki ana madde işaretine devam etmeyin. Önce onları düzeltin

    • Bir sonraki madde işaretine devam etmeden önce DB'nizi onarmak ve temizlemek için kullanacağınız DB Yöneticisi

  • Tüm önbellekleri, tarayıcıları ve eklentileri temizleyin

  • Tüm eklentileri devre dışı bırakın ve iyi bir önlem için tüm önbellekleri tekrar temizleyin. Bu sorun yeniden yönlendirme sorununa benzediğinden, muhtemelen ilk olarak yeniden yönlendirme ile ilgili olabilecek tüm eklentileri devre dışı bırakardım. Bir eklenti henüz v4.4 ile uyumlu olmayabilir. Sorunun devam edip etmediğini kontrol edin, devam ederse bir sonraki mermi noktasına devam edin, aksi takdirde buna daha ayrıntılı bakalım

    Tüm eklentileri devre dışı bırakarak başlayın, sadece soruna neden olduğu açık olan eklentileri devre dışı bırakarak da başlayabilirsiniz. Her eklentiyi etkinleştirdikten sonra kurulumunuzu uygun şekilde test edin. Soruna neden olan ilk eklenti, suçlu olacak. Bu durumda, hata ayıklama ayrıntılarıyla eklenti yazarına başvurun. Sadece iyi bir önlem için her eklenti aktivasyonundan sonra önbelleklerinizi temizlediğinizden emin olun.

  • Bu noktaya ulaştıysanız, önceki madde işareti sorununuzu çözmedi. Bir sonraki adım, temanızı sorun olarak ortadan kaldırmak için paketlenmiş bir temaya geçmek olmalıdır. Yine, önbellekleri temizle.

  • Her şey başarısız olursa, iki seçenek daha kaldı

    • Silin .htaccessve WordPress'in yeni bir tane oluşturmasına izin verin

    • WordPress'i yeniden yükleyin

Bu, sorununuzu çözmelidir. Başlamazsa, WordPress çekirdeğinde soruna neden olabilecek bir hata düşünmeniz gerekir.

Umarım bu hatayı yakalamaya yardımcı olur

GÜNCELLEME

Aslında her şeyi daha ayrıntılı olarak açıklamış gibi görünen fantastik trac bileti ile bağlantı kurmalıydım

Yukarıdaki trak biletinden ilginç ve oldukça alakalı yamalar

Şu anda böyle bir şeyi somut olarak test edemiyorum, ancak önerilen yamalar üzerinde çalışmalı ve onları test etmelisiniz. Ne alabilirim redirect_canonical()statik ön sayfaların sayfalama sorumlu olduğu aynı kod da tek sayfalarda sayfalama sorumlu olmasıdır.

ORİJİNAL CEVAP

Sayfaları tek sayfalar ( statik ön sayfalar gibi ) get_query_var( 'page' )sayfalamak için kullanır . WordPress 4.4 ( ve v4.4.1'de ), sayfalandırma get_query_var( 'page' )için kullanırken sayfalandırma ile ilgili sorunlara neden olan bir hata geldi .

Mevcut hata raporları, trac bileti # 35365 gibi , sadece sayfalandırma ile ilgili sorunları olan statik ön sayfalardan bahseder, ancak hata ile ilgili olarak get_query_var( 'page' ), bunun da kullanan tek yazı sayfalama ile ilgili sorunlara neden olacağını düşünürdüm get_query_var( 'page' ).

Yamaları trac biletlerinde açıklandığı gibi denemelisiniz. Bu işe yararsa, düzeltme ekini uygulayabilir ve bu hatayı düzelten v4.4.2'yi bekleyebilirsiniz.


1
Umarım bu OP sorunudur, kulağa büyük olasılıkla (bugün bunu kazmak mümkün değil ;-).
birgire

1
Düzeltmeyi denedim, ayrıca engelli kalıcı bağlantılar; değişiklik yok.
Milamber

1
Zamanım olur olmaz buna bakacağım. Cevabın hatada olduğunu hissediyorum, sadece takip etmek. Umarım yakında bir çözüm bulursun
Pieter Goosen

2
Güncellememi kontrol et, hatayı buldum ve ayrıca bir hata raporu
sundum

2
Bu satırlar yorumlandığında 3 yöntemin hepsinin çalıştığını doğruladı :) sizin lehinize 35544 kapalı bilet
Milamber

4

Verdiğiniz tüm bu üç örnek için bir sözdizimi hatası olduğunu unutmayın:

add_filter('content_pagination', 'custom_content'), 10, 2);

add_action('the_post', 'custom_content'));

add_action('template_redirect', 'custom_content'));

fazladan )bir ekleme.

Bu satırları şu şekilde değiştirin:

add_filter( 'content_pagination', 'custom_content', 10, 2);

add_action( 'the_post', 'custom_content' );

add_action( 'template_redirect', 'custom_content' );

Genel olarak küresel nesnelerle uğraşmayı tavsiye etmem, bu yüzden content_paginationfiltreyle son örneğinizin buraya gitmenin yolu olduğunu düşünüyorum .

Ayrıca aşağıdakilere sahip boş sayfalar eklemekten kaçınmak isteyebilirsiniz:

if( ! empty( $content ) )
    $pages[] = $content;

Burada bir eksik de )var:

$content = html_entity_decode(stripslashes(get_option('custom_content'));

1
Benim hatam, ekstra) onları gerçek uygulama ile içinde oldukları sınıftan kopyalayıp yapıştırarak kaldı. Onları ameliyattan çıkardım. Ne yazık ki content_pagination sürümü 404 hatasını da düzeltmiyor.
Milamber

1
Ayrıca $ içerik satırında eksik de var - güncellemeye bakın. @Milamber
birgire

1
Teşekkürler, düzeltildi. Op kodunda gördüğünüz sözdizimi hataları, gönderi için basitleştirilmesinden kaynaklanır.
Milamber

2
Tamam, bunu Yirmi Onaltı temalı bir vanilya WP 4.4 kurulumunda test ettim ve orada beklendiği gibi çalışıyor, bu yüzden kurulumunuzda size sorunu veren başka bir şey olabileceğini düşünüyorum. @Milamber
birgire

1
Garip, Yirmi Onbeş ile 2 farklı geliştirici ortamında denedim ve ikisi de aynı sonucu verdi. Bir daha bakacağım, teşekkürler @birgire
Milamber
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.