J'ai un gros post partagé avec <!-- nextpage -->
. Un terme se trouve à la page 50. Lorsque je recherche le terme, je tombe à la page 1.
Q: Comment le système peut-il me transférer automatiquement à la page 50?
Merci
UPDATE: Après en avoir eu besoin moi-même, je l'ai complètement retravaillé.
Je voulais pointer chaque appel get_permalink()
directement sur la page de publication paginée - sans aucune exception. Au moins, c’est la fonction utilisée par presque toutes les autres fonctions qui ont besoin d’être reliées quelque part, de sorte qu’elle est aussi la plus fiable.
Il intervient lorsque WP est entièrement chargé et ajoute une fonction action/rappel au crochet the_post
-. Là, il vérifie ensuite les globales $numpages
(contient le nombre de pages d’une publication) et $pages
(contient les parties d’une publication est scindée en utilisant <!--nextpost-->
dans le contenu). Si le nombre de pages n'est pas supérieur à 1
, il est annulé. Sinon, il cherche dans la page des articles la chaîne recherchée. S'il a été trouvé, il définit la propriété de classe $link
sur le lien de page à l'aide de _wp_link_page()
. Ce lien est ensuite intégré aux filtres proposés par get_permalink()
.
Cela fonctionne pour les articles, les pages et les types d'articles personnalisés
Comme à chaque fois: Gratuit pour utilisation. Prenez-le, utilisez-le. Aie du plaisir avec ça.
<?php
/**
* Plugin Name: (#31913) Search Results - direct link to page
*/
add_action( 'wp', array( 'search_direct_page_links', 'init' ) );
class search_direct_page_links
{
public static $instance;
public static $s;
public $link;
public static function init()
{
is_null( self :: $instance ) AND self:: $instance = new self;
return self :: $instance;
}
public function __construct()
{
if ( ! is_search() )
return;
is_null( self :: $s ) AND self :: $s = get_query_var( 's' );
add_action( 'the_post', array( $this, 'is_paged' ) );
}
public function is_paged( $post )
{
global $numpages, $pages;
// reset link:
$this->link = get_permalink();
// Remove filters attached from the last post
foreach ( array( 'post_link', 'page_link', 'post_type_link' ) as $filter )
{
remove_filter( $filter, array( $this, 'alter_link' ) );
}
if ( 1 >= $numpages )
return;
$target = 1;
foreach ( $pages as $i => $p )
{
if ( is_int( strpos( $p, self :: $s ) ) )
{
$target = absint( $i ) +1;
// Get the link now, as _wp_link_page()
// calls get_permalink() internally,
// which would lead to an endless nested loop.
$this->link = str_replace(
array( '<a href="', '">' )
,''
,_wp_link_page( $target )
);
}
}
if ( 1 < $target )
{
add_filter( 'post_link', array( $this, 'alter_link' ), 10, 3 );
add_filter( 'page_link', array( $this, 'alter_link' ), 10, 3 );
add_filter( 'post_type_link', array( $this, 'alter_link' ), 10, 4 );
}
}
public function alter_link( $permalink, $post, $leavename, $sample )
{
return $this->link;
}
}