Formun sayfalandırma başlıklarını desteklemenin bir yolu:
<!--nextpage(.*?)?-->
çekirdeğin desteklediği gibi basit bir şekilde <!--more(.*?)?-->
.
İşte bir örnek:
<!--nextpage Planets -->
Let's talk about the Planets
<!--nextpage Mercury -->
Exotic Mercury
<!--nextpage Venus-->
Beautiful Venus
<!--nextpage Earth -->
Our Blue Earth
<!--nextpage Mars -->
The Red Planet
çıktı benzer:
Bu, dolgu ve genişliği biraz ayarlamak zorunda kaldım Yirmi Onaltı temasında test edildi :
.page-links a, .page-links > span {
width: auto;
padding: 0 5px;
}
Demo eklentisi
İşte demo eklenti kullanan var content_pagination
, wp_link_pages_link
, pre_handle_404
ve wp_link_pages_args
bu extenstion desteklemek için filtreleri nextpage işaretleyici ( PHP 5.4+ ):
<?php
/**
* Plugin Name: Content Pagination Titles
* Description: Support for <!--nextpage(.*?)?--> in the post content
* Version: 1.0.1
* Plugin URI: http://wordpress.stackexchange.com/a/227022/26350
*/
namespace WPSE\Question202709;
add_action( 'init', function()
{
$main = new Main;
$main->init();
} );
class Main
{
private $pagination_titles;
public function init()
{
add_filter( 'pre_handle_404', [ $this, 'pre_handle_404' ], 10, 2 );
add_filter( 'content_pagination', [ $this, 'content_pagination' ], -1, 2 );
add_filter( 'wp_link_pages_link', [ $this, 'wp_link_pages_link' ], 10, 2 );
add_filter( 'wp_link_pages_args', [ $this, 'wp_link_pages_args' ], PHP_INT_MAX );
}
public function content_pagination( $pages, $post )
{
// Empty content pagination titles for each run
$this->pagination_titles = [];
// Nothing to do if the post content doesn't contain pagination titles
if( false === stripos( $post->post_content, '<!--nextpage' ) )
return $pages;
// Collect pagination titles
preg_match_all( '/<!--nextpage(.*?)?-->/i', $post->post_content, $matches );
if( isset( $matches[1] ) )
$this->pagination_titles = $matches[1];
// Override $pages according to our new extended nextpage support
$pages = preg_split( '/<!--nextpage(.*?)?-->/i', $post->post_content );
// nextpage marker at the top
if( isset( $pages[0] ) && '' == trim( $pages[0] ) )
{
// remove the empty page
array_shift( $pages );
}
// nextpage marker not at the top
else
{
// add the first numeric pagination title
array_unshift( $this->pagination_titles, '1' );
}
return $pages;
}
public function wp_link_pages_link( $link, $i )
{
if( ! empty( $this->pagination_titles ) )
{
$from = '{{TITLE}}';
$to = ! empty( $this->pagination_titles[$i-1] ) ? $this->pagination_titles[$i-1] : $i;
$link = str_replace( $from, $to, $link );
}
return $link;
}
public function wp_link_pages_args( $params )
{
if( ! empty( $this->pagination_titles ) )
{
$params['next_or_number'] = 'number';
$params['pagelink'] = str_replace( '%', '{{TITLE}}', $params['pagelink'] );
}
return $params;
}
/**
* Based on the nextpage check in WP::handle_404()
*/
public function pre_handle_404( $bool, \WP_Query $q )
{
global $wp;
if( $q->posts && is_singular() )
{
if ( $q->post instanceof \WP_Post )
$p = clone $q->post;
// check for paged content that exceeds the max number of pages
$next = '<!--nextpage';
if ( $p
&& false !== stripos( $p->post_content, $next )
&& ! empty( $wp->query_vars['page'] )
) {
$page = trim( $wp->query_vars['page'], '/' );
$success = (int) $page <= ( substr_count( $p->post_content, $next ) + 1 );
if ( $success )
{
status_header( 200 );
$bool = true;
}
}
}
return $bool;
}
} // end class
Kurulum : /wp-content/plugins/content-pagination-titles/content-pagination-titles.php
Dosyayı oluşturun ve eklentiyi etkinleştirin. Herhangi bir eklentiyi test etmeden önce yedekleme yapmak her zaman iyi bir fikirdir.
Üst Eğer nextpage işaret eksik, daha sonra ilk hizalama başlık sayısal olduğunu.
Ayrıca bir içerik sayfalama başlığı eksikse, yani <!--nextpage-->
beklendiği gibi sayısal olur.
Ben ilk unuttuk nextpage içinde hata WP
gösterir yukarı biz yoluyla sayfa sayısını değiştirirseniz bu, sınıf content_pagination
filtresi. Bu yakın zamanda @PieterGoosen tarafından # 35562'de bildirildi .
Biz bizim demo eklentisi o aşmak için deneyin pre_handle_404
dayalı filtre geri arama WP
sınıf kontrolü burada biz kontrol, <!--nextpage
yerine <!--nextpage-->
.
Testler
İşte bazı ek testler:
Test # 1
<!--nextpage-->
Let's talk about the Planets
<!--nextpage-->
Exotic Mercury
<!--nextpage-->
Beautiful Venus
<!--nextpage-->
Our Blue Earth
<!--nextpage-->
The Red Planet
Seçilen 1 için çıkış :
beklenildiği gibi.
Test # 2
Let's talk about the Planets
<!--nextpage-->
Exotic Mercury
<!--nextpage-->
Beautiful Venus
<!--nextpage-->
Our Blue Earth
<!--nextpage-->
The Red Planet
Seçilen 5 için çıkış :
beklenildiği gibi.
Test # 3
<!--nextpage-->
Let's talk about the Planets
<!--nextpage Mercury-->
Exotic Mercury
<!--nextpage-->
Beautiful Venus
<!--nextpage Earth -->
Our Blue Earth
<!--nextpage Mars -->
The Red Planet
Seçilen 3 için çıkış :
beklenildiği gibi.
Test # 4
Let's talk about the Planets
<!--nextpage Mercury-->
Exotic Mercury
<!--nextpage Venus-->
Beautiful Venus
<!--nextpage Earth -->
Our Blue Earth
<!--nextpage Mars -->
The Red Planet
İle Çıktı Dünya'da seçilmiş:
beklenildiği gibi.
Alternatifler
Başka bir yol, eklenecek sayfalandırma başlıklarını destekleyecek şekilde değiştirmektir:
<!--pt Earth-->
Tüm sayfalandırma başlıkları ( puanlar ) için tek bir yorumu desteklemek de kullanışlı olabilir :
<!--pts Planets|Mercury|Venus|Earth|Mars -->
veya özel alanlar üzerinden mi?