Trying to get property of non-object … post-template.php on line 29 (Créer un compte)

  • Statut : non résolu
9 sujets de 1 à 9 (sur un total de 9)
  • Auteur
    Messages
  • #525970
    ranm
    Participant
    Initié WordPress
    5 contributions

    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.org

    Problè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 29

    Cette 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…

    #901402
    Guy
    Participant
    Maître WordPress
    14817 contributions

    Sans 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.

    #901403
    ranm
    Participant
    Initié WordPress
    5 contributions

    Je 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.

    #901404
    Guy
    Participant
    Maître WordPress
    14817 contributions

    l’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.

    #901405
    ranm
    Participant
    Initié WordPress
    5 contributions

    Il 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é…

    #901406
    Guy
    Participant
    Maître WordPress
    14817 contributions

    si tu remets le twentyeleven original?

    Si cela ne vient pas du thème, c’est dans une extension.

    #901407
    ranm
    Participant
    Initié WordPress
    5 contributions

    OK, 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…

    #901408
    ranm
    Participant
    Initié WordPress
    5 contributions

    OK, 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é.)

    #901409
    Guy
    Participant
    Maître WordPress
    14817 contributions

    tu 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.

9 sujets de 1 à 9 (sur un total de 9)
  • Vous devez être connecté pour répondre à ce sujet.