• Resolved luismoyano

    (@luismoyano)


    Hi there,
    I just updated my WordPress to version 5.5, and for whatever reason the get_next_post () function has stopped working and it does return no object. However, this behavior only happens in the new posts that I publish or republish. The old posts works fine.

    However, get_previous_post () does return an object, and it can generate a link in absolutely all posts on the blog.

    I have activated SAVEQUERIES to true in WP_config.php to be able to see the queries that are generated when the page is loaded, and I have painted one by one in phpMyadmin, but I have not been able to see that any of them have relation with pagination, but with plugins like Yoast Seo, or the related_post() just to mention some of them.

    So, I’m completely lost, and I do not know where to start to look for to fix the issue.

    BTW, I don’t use any rare or custom taxonomy, at least that I know of.

    Any idea where I can start looking for or how to solve it?
    Anyone else with the same problem as me?

    Thanks in advance!

    Note: I do not publish an url to check, because I do not think has nothing to do with my problem. I hope it’s not a problem.

Viewing 10 replies - 1 through 10 (of 10 total)
  • It might not be related, but it seems like the only thing in 5.5 that I saw:
    Don’t output the adjacent posts rel link by default

    But what are you expecting get_next_post() to return on a new post? There is no next post.

    Thread Starter luismoyano

    (@luismoyano)

    Thanks @joyously,
    Maybe I did not explain well my problem. Of course, I expect to get a new post and it’s object through get_next_post() function, when I’m seeing not the last post published, but the previous post to that one, hahaha… Of course, the last published post does have no next post at all.

    The thing is that I have published 4 new posts since I updated to 5.5, and when I start clicking in prev_post link in these posts, they always get the prev post link, but never get the next post link, until….. I arrive to the latest posts published in the website before making the update from 4.9 to 5.5. In all the following posts since that point WordPress gets both links (next and prev links) with no problem if I click in the prev button again and again to navigate through the posts of the website.

    Do you understand me better now?

    Any idea?

    BTW, I can not see any javascript error, nor php or database error in the logs.

    OK, are you using the block editor for the new posts that have the problem?
    Are you using a theme that is old?
    Is it possible that there is some z-index problem or pointer-events problem in the CSS, and the click doesn’t actually click the link? (but only on the new posts done in the new editor)
    It is very unlikely that the function itself isn’t working, since it works in the older posts.

    Thread Starter luismoyano

    (@luismoyano)

    HI Joy,
    I’m not using the block editor, I have disabled because I do not like at all, I use my own shortcodes instead. The theme is not completely updated, but is the very last version before the current one. There is no css problem, as I’m using my own customization for the buttons, and I’m showing them with my own php and css code.

    The problem is not exactly the function. As you pointed out, the get_adjacent function() (get_next_post()) is working in the old posts. What I want to find out, is why is not returning any object in the case of the new posts.

    I’m debbuging the queries, but it seems that query is done before getting the pagination page, so I can not get that query printed to see into it, and see what is failing.

    Any idea about how to get that query printed in a log file, and see in PhpMyadmin what is failing on it?

    Thanks in advance!

    Have you tried https://www.ads-software.com/plugins/query-monitor/ ?
    You can also try Health Check plugin in Troubleshoot mode, so you can disable plugins and theme for your user only, to see if a conflict.

    Thread Starter luismoyano

    (@luismoyano)

    Hi Again,
    I have found a new clue to solve this problem…
    My theme to get the next post use the function in this way:
    $next_post = get_next_post();

    I have used the mother function in this way:
    $next_post = get_adjacent_post( true, ”, false );

    Now I’m getting the next link in more post than before, and I have realized that maybe my problem is related to the category where are included those posts, which are not the same. ?Could it be this the problem? I mean…

    The website is a recipe website, that shows different recipes of different categories ordered by published date, until here everything is pretty normal. But… it seems that the next link buttons on every post depend on the categories where every post is included, Am I wrong?

    Is there a way to generate the next and prev links just depending of its published date, and not depending of the category where they are included?

    Well, if you look at the parameters,
    https://developer.www.ads-software.com/reference/functions/get_next_post/
    the default is “not in the same term”. By passing true, you are asking for the next post in the same category.

    I don’t like to use the base functions. In my theme, I use the_post_navigation() on the single page. The defaults work great.
    And I use the_posts_pagination( 'mid_size=3' ); for archive pages.

    Thread Starter luismoyano

    (@luismoyano)

    Hello again @joyously,
    as much as I have tried to use the functions included in WordPress to get the next post (that is, the newest post published before the post I am viewing) I have not succeeded.

    I’ve been using: get_next_post), its parent get_adjacent_post () function, and also the_post_navigation () function you suggested to me, but with neither of them I have got the next_post object in many of published posts.

    As far as I know and if I’m not mistaken, the default arguments of those functions do not fix any taxonomy, nor they use a common category to search for. FYI, if I use the category in the arguments, I do get the next_post object on quite a few more posts than usisng no arguments. But with the default option that is in_same_term = false, where the query to the database is supposed to search for results regardless of the category or taxonomy, it fails and does not generate any results.

    I have activated SAVE_QUERIES to be able to debug the queries, but I can’t see the query that the WordPress core generates to get these links, so I can’t debug this query, and see what fails in PhpMyAdmin.

    So in the end what I have done is generate a new query by myself inside my pagination.php where I obtain all the posts ordered by date, I save them in an array. Then I look for the index of the post that I am viewing, and then I only obtain the previous and next index for show, and then the links, title and image for each one of them.

    I haven’t had time to look yet if doing this whole process with php is slower than doing it with SQl regarding the performance of each page load, but I have a question that I hope you can answer me.

    I do not see in query monitor that the core of WordPress makes a query to obtain all the posts published on the web, and neither it does ordered by date. But the question is …

    Is there some internal WordPress core array that has this information (all posts in an array or object) and that can be accessed from the single.php or the pagination script of my theme?

    This would save me all these queries, and save loading time.

    Thanks in advance!

    I’m pretty sure that doing it in PHP is slower than in SQL.
    WordPress only queries what is needed for each page, but the results are cached to reduce accesses to the database. The options table is auto-loaded, so calling get_option() multiple times is one database access.

    What you describe sounds like the posts entered after the update are different somehow. What else changed? plugin/theme updates? editor? PHP version?
    Did you try it with Health Check? (paging, but also creating a post and then paging)

    Thread Starter luismoyano

    (@luismoyano)

    Hi @joyously, there was a lot of changes in my case apart from this update from WordPress 4.9 to WordPress 5.5. I changed to a new VPS with everything inside completely updated, php 7.4, Maria Db 10.5, last cPanel version, theme, plugins, everything updated.

    In any case, my main problem was the not ability to debug the queries made by the system regarding these functions (get_next_post() or get_adjacent_post()) to be able to see where was the error. These queries does not appear on query_monitor plugin or mysql logs. So, I have not had the opportunity to debug them, and see what was happening.

    By the way, I solved the issue in two different ways:

    1) Asking for the full amount of posts in a query, and then creating an array in php, and look for the prev and next index in that array regarding the given post. This whole process takes: 0.053190946578979 (Not a lot of time).

    2) Making two queries in mysql to get the first prev and first next post depending of the post_date and regarding the given post. This process takes 0.00084805488586426 (much less time).

    So, as you pointed out, Mysql is much more efficient than PHP. So, I have chosen the second option.

    Thank you so much for all your help with this bro!

Viewing 10 replies - 1 through 10 (of 10 total)
  • The topic ‘get_next_post() not working after updating to WordPress 5.5’ is closed to new replies.