Mise à jour 2016-01-21
Tous les tests actuels de ma part sont effectués sur de nouvelles installations de 4.4.1 avec les paramètres suivants:
Plain permalinks
Twentysixteen Theme
No plugins activated
Si la publication ne comporte qu'une seule page (c'est-à <!--nextpage-->
- dire qu'elle n'apparaît pas dans la publication), les pages supplémentaires sont correctement ajoutées (même si vous ajoutez plusieurs pages supplémentaires¹).
Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
Si le message contient plus de 2 pages, les pages supplémentaires 404 et la redirection canonique vers la page 1 du message.
Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
<!--nextpage-->
This is page 2
Dans le second cas $wp_query->queried_object
est vide une fois que vous avez atteint les pages supplémentaires. Vous devrez désactiver la redirection canonique pour voir ceciremove_filter('template_redirect', 'redirect_canonical');
Les deux correctifs de base suivants ont été essayés, séparément et ensemble, sans changement de comportement: https://core.trac.wordpress.org/ticket/35344#comment:16
https://core.trac.wordpress.org/ticket/35344#comment:34
Pour plus de facilité d'utilisation, voici le code avec lequel je teste actuellement:
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;
}
¹C'est le code que j'ai utilisé pour tester plusieurs pages supplémentaires sur une seule page
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;
}
Question d'origine
Avant la version 4.4, je pouvais ajouter une page supplémentaire à un message multipage avec ce qui suit:
add_action('template_redirect', 'custom_content');
function custom_content() {
global $post;
$content = html_entity_decode(stripslashes(get_option('custom_content')));
$post->post_content .= $content;
}
Avec get_option ('custom_content') étant quelque chose comme:
<!--nextpage-->
Hello World
Depuis la mise à niveau vers 4.4, le code n'a pas fonctionné; la navigation vers la page supplémentaire déclenche une erreur 404 et redirect_canonical les renvoie au permalien de la publication. La désactivation de redirect_canonical me permet d'afficher la page supplémentaire et le contenu supplémentaire est là, mais cela déclenche toujours une erreur 404.
J'ai essayé un certain nombre de solutions de contournement, dont aucune ne résout l'erreur 404, notamment:
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;
}
A également essayé de tirer parti du nouveau filtre content_pagination qui a été ajouté dans 4.4:
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;
}
À ce stade, je n'ai plus d'idées sur la façon de restaurer cette fonctionnalité et toute aide serait appréciée.
Réponses:
MISE À JOUR 21-01-2016 19:35 SA TIME - BUG TROUVÉ !!!!! OUAIS!!!!!!
J'ai finalement trouvé le bug. Comme vous l'avez indiqué dans votre dernière mise à jour, l'échec ne se produit que lorsqu'il y
$post_content
a une<!--nextpage-->
balise dans le contenu. Je l'ai testé et j'ai confirmé que toute autre page après la page après le<!--nextpage-->
retourne un 404, puis la page est redirigée vers la première page.Cela est dû aux lignes de code suivantes dans la
handle_404()
méthode qui a été introduite dans laWP
classe dans WordPress 4.4Ce que fait ce code, c'est que chaque fois que la
<!--nextpage-->
balise est définie dans lepost_content
, il retournera un 404 lors de l'accès à n'importe quelle page qui est ajoutée après le contenu via lecontent_pagination
filtre. En raison de la définition d'un 404,redirect_canonical()
redirige toute page ajoutée vers la première pageJ'ai déposé un ticket Trac sur ce problème que vous pouvez consulter ici
Au moment de la rédaction, il n'y avait pas encore de commentaires, alors assurez-vous de vérifier régulièrement l'état du billet
SOLUTION ACTUELLE - RÉTROACTION DU BILLET TRAC A / W
Pour l'instant, jusqu'à ce que nous recevions des commentaires et des correctifs possibles dans les versions futures, supprimez simplement ces lignes de la
WP
classe jusqu'à nouvel ordreQUELLE HEURE EST-IL ...... IL EST TEMPS DE DÉBOGAGE !!!!!
J'ai eu le temps de tester pleinement cela. J'ai pris votre code et l'ai testé sur:
Mon installation locale v4.3
Mon installation locale v4.4.0
Mon installation locale v4.4.1
Terminer la nouvelle installation locale de v4.4.1 avec uniquement la
Hello World
publication et laSample Page
pageavec mes permaliens définis sur
default
etPost Name
Voici mon code de test pour créer 4 pages avec l'intérieur de mon message de test.
J'ai aussi testé
pour faire bonne mesure
Sur chaque structure d'installation et de permalien, tout votre code fonctionne ( à l'exception de la version
content_pagination
4.3 qui est attendue ).J'ai également défini
Sample Page
comme une première page statique, mais cela a échoué à la page 2 en tant que conformation au bogue comme décrit dans ma RÉPONSE ORIGINALE et ** ÉDITERDonc, la conclusion est que cela n'a rien à voir avec le bogue dans le noyau ou tout autre bogue dans le noyau. D'après les commentaires, quelque chose perturbe l'objet interrogé sur les pages de message paginées, et c'est quelque chose que nous devons déboguer. Malheureusement, comme ce problème est maintenant localisé, je ne peux pas donner de solutions exactes.
DÉBOGAGE DU PROBLÈME
Vous devez utiliser le flux de travaux suivant pour déboguer le problème
Obtenez-vous une énorme quantité de café riche en caféine avec beaucoup de sucre
Faites une sauvegarde de vous db
Téléchargez et installez les plugins suivants ( je n'ai aucune affiliation à aucun plugin )
Déboguer des objets pour un débogage normal. Une fois installé et configuré, réparez tous les bugs évidents qui pourraient être mis en évidence par le plugin. Ne passez pas au prochain point principal si vous avez des bogues évidents. Réparez-les d'abord
DB Manager que vous utiliserez pour réparer et nettoyer votre base de données avant de passer au point suivant
Effacez tous les caches, navigateurs et plugins
Désactivez tous les plugins et effacez à nouveau tous les caches pour faire bonne mesure. Parce que ce problème ressemble à un problème de redirection, je désactiverais probablement d'abord tous les plugins qui pourraient avoir quelque chose à voir avec la redirection. Il se peut qu'un plugin ne soit pas encore compatible avec la v4.4. Vérifiez si le problème persiste, si c'est le cas, passez au point suivant, sinon, examinons cela plus en détail
Commencez par désactiver tous les plugins, vous pouvez également commencer par désactiver simplement les plugins qui pourraient être évidents pour causer le problème. Testez correctement votre installation après l'activation de chaque plug-in. Le premier plugin activé à l'origine du problème sera le coupable. Dans ce cas, contactez l'auteur du plugin avec les détails de débogage. Assurez-vous de vider vos caches après chaque activation de plugin juste pour faire bonne mesure
Si vous avez atteint ce point, le point précédent n'a pas résolu votre problème. La prochaine étape devrait être de passer à un thème groupé pour éliminer votre thème comme problème. Encore une fois, effacez les caches.
Si tout a échoué, vous avez encore deux options
Supprimer
.htaccess
et laisser WordPress en créer un nouveauRéinstallez WordPress
Cela devrait résoudre votre problème. Si ce n'est pas le cas, vous devez considérer un bogue dans le noyau WordPress qui pourrait être à l'origine du problème.
J'espère que cela aide à attraper le bug
MISE À JOUR
J'aurais dû me lier au ticket trac suivant qui semble tout expliquer plus en détail
Correctifs intéressants et tout à fait pertinents du ticket Trac ci-dessus
https://core.trac.wordpress.org/ticket/35344#comment:16
https://core.trac.wordpress.org/ticket/35344#comment:34
Je ne peux pas tester concrètement quoi que ce soit en ce moment, mais vous devez parcourir les correctifs suggérés et les tester. Ce que je peux comprendre, c'est que le même code dans
redirect_canonical()
lequel est responsable de la pagination des premières pages statiques est également responsable de la pagination sur les pages simples.RÉPONSE ORIGINALE
Les pages uniques ( comme les premières pages statiques ) sont
get_query_var( 'page' )
utilisées pour paginer. Avec WordPress 4.4 ( et dans la v4.4.1 ), un bug est survenu qui provoque des problèmes de pagination lors de l'utilisationget_query_var( 'page' )
de la pagination.Les rapports de bogues actuels, comme le ticket trac # 35365 , ne mentionnent que les premières pages statiques qui ont des problèmes de pagination, mais comme le bug se rapporte à
get_query_var( 'page' )
, je pense que cela entraînerait également des problèmes avec la pagination à une seule publication qui utilise égalementget_query_var( 'page' )
.Vous devriez essayer les correctifs comme décrit dans les tickets trac. Si cela fonctionne, vous pouvez appliquer le patch et attendre la v4.4.2 qui corrigera ce bug
la source
Notez qu'il y a une erreur de syntaxe pour ces trois exemples que vous avez fournis:
où un supplément
)
est ajouté.Remplacez ces lignes par:
Je ne recommanderais pas de jouer avec les objets globaux en général, donc je pense que votre dernier exemple avec le
content_pagination
filtre est la voie à suivre ici.Vous pouvez également éviter d'ajouter des pages vides avec:
Il manque aussi
)
ici:la source