Comment donner un titre personnalisé aux liens paginés?

12

J'ai divisé le contenu de mon message en plusieurs pages à l'aide du code <! - nextpage -> . Je veux donner à mes liens paginés leur propre titre au lieu du 1,2,3 habituel. Comment puis-je faire ceci? cause sur cette doc enlace , il mentionne uniquement la méthode pour ajouter un suffixe ou un préfixe. Je veux juste donner à chaque numéro paginé leur propre titre personnalisé

    
posée Ruriko 15.09.2015 - 02:38

2 réponses

17

Voici un moyen de prendre en charge les titres de pagination du formulaire:

<!--nextpage(.*?)?--> 

de la même manière que le noyau prend en charge <!--more(.*?)?--> .

Voici un exemple:

<!--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

avec une sortie semblable à:

CeciaététestésurlethèmeTwentySixteen,oùjedevaisajusterunpeuleremplissageetlalargeur:

.page-linksa,.page-links>span{width:auto;padding:05px;}

plug-indedémonstration

Voiciunplug-indedémonstrationutilisantlesfiltrescontent_pagination,wp_link_pages_link,pre_handle_404etwp_link_pages_argspourprendreenchargecetteextensiondumarqueurnextpage(PHP5.4+):

<?php/***PluginName:ContentPaginationTitles*Description:Supportfor&lt;!--nextpage(.*?)?--&gt;inthepostcontent*Version:1.0.1*PluginURI:http://wordpress.stackexchange.com/a/227022/26350*/namespaceWPSE\Question202709;add_action('init',function(){$main=newMain;$main->init();});classMain{private$pagination_titles;publicfunctioninit(){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);}publicfunctioncontent_pagination($pages,$post){//Emptycontentpaginationtitlesforeachrun$this->pagination_titles=[];//Nothingtodoifthepostcontentdoesn'tcontainpaginationtitlesif(false===stripos($post->post_content,'<!--nextpage'))return$pages;//Collectpaginationtitlespreg_match_all('/<!--nextpage(.*?)?-->/i',$post->post_content,$matches);if(isset($matches[1]))$this->pagination_titles=$matches[1];//Override$pagesaccordingtoournewextendednextpagesupport$pages=preg_split('/<!--nextpage(.*?)?-->/i',$post->post_content);//nextpagemarkeratthetopif(isset($pages[0])&&''==trim($pages[0])){//removetheemptypagearray_shift($pages);}//nextpagemarkernotatthetopelse{//addthefirstnumericpaginationtitlearray_unshift($this->pagination_titles,'1');}return$pages;}publicfunctionwp_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;}publicfunctionwp_link_pages_args($params){if(!empty($this->pagination_titles)){$params['next_or_number']='number';$params['pagelink']=str_replace('%','{{TITLE}}',$params['pagelink']);}return$params;}/***BasedonthenextpagecheckinWP::handle_404()*/publicfunctionpre_handle_404($bool,\WP_Query$q){global$wp;if($q->posts&&is_singular()){if($q->postinstanceof\WP_Post)$p=clone$q->post;//checkforpagedcontentthatexceedsthemaxnumberofpages$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;}}//endclass

Installation:créezlefichier/wp-content/plugins/content-pagination-titles/content-pagination-titles.phpetactivezleplug-in.Toujoursunebonneidéedesauvegarderavantdetestern'importequelplugin.

Silemarqueurpagesuivantesupérieurestmanquant,letitredelapremièrepaginationestnumérique.

Demême,siuntitredepaginationdecontenuestmanquant,àsavoir<!--nextpage-->,ilseranumérique,commeprévu.

J'aid'abordoubliéleboguenextpagedanslaclasseWP,quiapparaîtsinousmodifionslenombredepagesvialefiltrecontent_pagination.Celaarécemmentétérapporté[email protected] # 35562 .

Nous essayons de résoudre ce problème dans notre plug-in de démo avec un rappel de filtre pre_handle_404 , basé sur le contrôle de classe WP ici , où nous vérifions <!--nextpage au lieu de <!--nextpage--> .

Tests

Voici quelques tests supplémentaires:

Test n ° 1

<!--nextpage-->
Let's talk about the Planets
<!--nextpage-->
Exotic Mercury
<!--nextpage-->
Beautiful Venus
<!--nextpage-->
Our Blue Earth
<!--nextpage-->
The Red Planet

Sortie pour 1 sélectionné:

.

commeprévu.

Testn°2

Let'stalkaboutthePlanets<!--nextpage-->ExoticMercury<!--nextpage-->BeautifulVenus<!--nextpage-->OurBlueEarth<!--nextpage-->TheRedPlanet

Sortiepour5sélectionné:

.

commeprévu.

Testn°3

<!--nextpage-->Let'stalkaboutthePlanets<!--nextpageMercury-->ExoticMercury<!--nextpage-->BeautifulVenus<!--nextpageEarth-->OurBlueEarth<!--nextpageMars-->TheRedPlanet

Sortiepour3sélectionné:

.

commeprévu.

Testn°4

Let'stalkaboutthePlanets<!--nextpageMercury-->ExoticMercury<!--nextpageVenus-->BeautifulVenus<!--nextpageEarth-->OurBlueEarth<!--nextpageMars-->TheRedPlanet

SortieavecTerresélectionné:

comme prévu.

Alternatives

Une autre solution serait de le modifier pour prendre en charge les titres de pagination à ajouter avec:

<!--pt Earth-->

Il peut également être utile de prendre en charge un seul commentaire pour tous les titres de pagination ( pts ):

<!--pts Planets|Mercury|Venus|Earth|Mars -->

ou peut-être via des champs personnalisés?

    
réponse donnée birgire 18.05.2016 - 12:39
5

Vous pouvez utiliser le filtre wp_link_pages_link

Passez d'abord notre espace réservé pour la chaîne personnalisée (vous pouvez utiliser ce que vous voulez sauf la chaîne contenant % ; pour l'instant, j'utilise #custom_title# ).

wp_link_pages( array( 'pagelink' => '#custom_title#' ) );

Ajoutez ensuite notre filtre dans functions.php . Dans la fonction de rappel, créez un tableau de titres, recherchez le numéro de page actuel et remplacez #custom_title# par la valeur correspondant au numéro de page actuel.

Exemple: -

add_filter('wp_link_pages_link', 'wp_link_pages_link_custom_title', 10, 2);
/**
 * Replace placeholder with custom titles
 * @param string $link Page link HTML
 * @param int $i Current page number
 * @return string $link Page link HTML
 */
function wp_link_pages_link_custom_title($link, $i) {

    //Define array of custom titles
    $custom_titles = array(
        __('Custom title A', 'text-domain'),
        __('Custom title B', 'text-domain'),
        __('Custom title C', 'text-domain'),
    );

    //Default title when title is not set in array
    $default_title = __('Page', 'text-domain') . ' ' . $i; 

    $i--; //Decrease the value by 1 because our array start with 0

    if (isset($custom_titles[$i])) { //Check if title exist in array if yes then replace it
        $link = str_replace('#custom_title#', $custom_titles[$i], $link);
    } else { //Replace with default title
        $link = str_replace('#custom_title#', $default_title, $link);
    }

    return $link;
}
    
réponse donnée Sumit 18.05.2016 - 11:37

Lire d'autres questions sur les étiquettes