- Statut : non résolu
- Ce sujet contient 8 réponses, 2 participants et a été mis à jour pour la dernière fois par
Guy, le il y a 10 années et 3 mois.
-
AuteurMessages
-
2 juillet 2013 à 10 h 05 min #525970
Ma configuration WP actuelle
– Version de WordPress : 3.5.1
– Version de PHP/MySQL : 5 ?
– Thème utilisé : custom, basé sur TwentyEleven
– Extensions en place : Adminimize, BackWPUp, Collapsomatic, Contact Form 7, Contact Form DB, Image Mapper, K-News, No Image LInk, Shiba Gallery, Sidebar Login, Simple Taxinomy, Ultimate post widget, User Role Editor, Widget Context, WP Nivo Slider,
– Nom de l’hebergeur : OVH
– Adresse du site : http://www.ird2.orgProblème(s) rencontré(s) :
Bonjour,
J’ai un bug qui me résiste sur un site un peu complexe.
Certaines pages ne s’affichent pas si le visiteur n’est pas loggé.
Sur ces pages (par exemple http://www.ird2.org/rencontres-nationale/sol-contre-tous/), le debug renvoie une erreur Notice: Trying to get property of non-object in / [ … ] /wp-includes/post-template.php on line 29Cette ligne renvoie simplement get_post()->ID !
Il y a effectivement un contrôle d’accès sur certaines pages, mais il est clair dans mon code – sur celles qui m’inquiètent, c’est quasiment une copie du template de post standard, vraiment rien de sorcier.
J’ai du mal à comprendre par où commencer pour éliminer ce bug…
2 juillet 2013 à 10 h 14 min #901402Sans le code difficile de te répondre, mais cette erreur indique un défaut dans l’algorithme, une fonction est appelée avec des paramètres invalides en général.
2 juillet 2013 à 10 h 31 min #901403Je n’ai pas touché le code de post-template.php, justement, c’est l’original.
La fonction en question c’est ça (lignes 28 à 30) :function get_the_ID() {
return get_post()->ID;
}Visiblement, il semble considérer qu’il n’y a pas de post.
C’est ça qui m’interroge : en quoi si je suis loggé il trouve un post, et pas si je suis un visiteur lambda…De plus, j’ai plusieurs Custom Content Types sur ce site, et il me fait ça sur deux d’entre eux uniquement.
Si quelqu’un a des pistes pour m’aiguiller sur où je peux commencer à chercher, je suis preneur.2 juillet 2013 à 10 h 37 min #901404l’erreur n’est pas dans get_the_ID mais dans la partie qui appelle la fonction.
Cette fonction doit être appelée lorsque l’on est dans la boucle, est ce que tu es dans une loop WordPress lorsque tu l’appelles pour un visiteur simple.
2 juillet 2013 à 10 h 49 min #901405Il me semblait, pourtant.
Cette fonction je ne l’appelle pas à la main : elle est appelée quelque part dans le template (j’ai réutilisé TwentyEleven comme base).
En l’occurence, par exemple, pour cette page : http://www.ird2.org/actualites/vers-un-observatoire-regional-de-la-biodiversite-en-basse-normandie/Le template est celui-ci :
<?php
get_header(); ?>Je ne sais pas même pas par qui/où cette fonction est appelée…
Mais même si je change le template ça ne change rien – visiblement l’erreur arrive avant.Est-ce qu’il est possible que ce soit au moment de l’interprétation du permalink ?
Même quand j’essaye avec le chemin complet sans url propre (donc avec l’ID numéro du post dans l’url) , ça me renvoie vers le permalink et ça bugge…
Encore une fois, je ne comprends pas ce que j’aurais pu faire pour qu’il perde l’ID du post en cours, uniquement lorsque je ne suis pas loggé…2 juillet 2013 à 10 h 55 min #901406si tu remets le twentyeleven original?
Si cela ne vient pas du thème, c’est dans une extension.
2 juillet 2013 à 10 h 57 min #901407OK, on avance : je viens de circonscrire un peu le bug.
Il ne se produit que sur les posts programmés !
J’utilise les dates des posts pour des événements à venir, et c’est là que ça bugge…
Est-ce que ça veut dire que get-post() ne renverrait que les événements publiés, sauf pour les utilisateurs reconnus ?
Et si c’est le cas, j’imagine qu’il faut que j’écrive une fonction spéciale dans function.php pour corriger ça ?
Mince, ça dépasse mes compétences…5 juillet 2013 à 9 h 20 min #901408OK, c’est réglé.
Donc par défaut WordPress ne voit pas les contenus futurs… sauf quand on est identifié.J’ai résolu en insérant cette fonction dans le function.php, qui permet désormais de ne plus faire de différence entre les posts publiés ou futurs :
/* Show future posts */
function show_future_posts($posts)
{
global $wp_query, $wpdb;
if(is_single() && $wp_query->post_count == 0)
{
$posts = $wpdb->get_results($wp_query->request);
}
return $posts;
}
add_filter(‘the_posts’, ‘show_future_posts’);(Apparemment, il y aurai aussi un plugin « future is present », mais je ne l’ai pas essayé.)
5 juillet 2013 à 9 h 41 min #901409tu n’indiques qu’une partie de la solution et c’est inutilisable hors de ton contexte particulier, par défaut WordPress n’affiche pas les articles à publier dans le futur, que l’on soit identifié ou non.
il faut nécessairement quelque chose pour modifier la requête ce qui n’apparait ni dans ton exposé du problème ni dans ta solution, et de toute façon la fonction provoquant le bug ne devrait pas être appelée si il n’y a pas d’article à afficher, cela parait être un bug dans un algorithme. -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.