Fix qTranslate with WordPress 3.9

Thursday, April 17th, 2014 at 14:40 +0000 (UTC) by Alexander Kirk

When updating a blog of mine to WordPress 3.9 the page wouldn't load anymore because of qTranslate not able to cope with the update. In the error log it says:

PHP Catchable fatal error: Object of class WP_Post could not be converted to string in ../wp-content/plugins/qtranslate/qtranslate_core.php on line 455

The error is caused by this change: get_the_date() to accept optional $post argument

There is a proposed quick fix by Saverio Proto, but it doesn't take the problem at its root:

qTranslate registers the function qtrans_dateFromPostForCurrentLanguage($old_date, $format ='', $before = '', $after = '') for the hook get_the_date but it actually only accepts one parameter. With the new update it accepts a second parameter $post, which now wrongly fills the variable $before that is in the process being converted to a string.

So the solution simply is to delete the two parameters that were assigned the wrong meaning and have defaults anyway.

12 Responses to “Fix qTranslate with WordPress 3.9”

  1. Balky Says:

    your solution saved my day! Just wanted to say thanks!

    How did you debug it?

  2. Alexander Kirk Says:

    Nothing spectacular, just ahead of the line with the error message I added a var_dump($before); to see that the content of the variable is an object instead of a string, then I checked the Codex to see the parameters of the function being called.

  3. Boris Says:

    Thank you very much! I was nearly about to edit the tables in PHPmyadmin...glad that I find your solution.

  4. Daniela Says:

    Hi there! I´m pretty new to WordPress and especially to working with github. So my question is: Is it correct to download the gist code you offered, then extract the file in it and upload it on my FTP to the qtranslate folder? This is what I did, but I still get the error message on my website like before: CATCHABLE FATAL ERROR: OBJECT OF CLASS WP_POST COULD NOT BE CONVERTED TO STRING IN /HOME/.SITES/698/SITE8704257/WEB/WP-CONTENT/PLUGINS/QTRANSLATE/QTRANSLATE_CORE.PHP ON LINE 455

    What am I doing wrong?

  5. Alexander Kirk Says:

    The file shows what needs to be changed. Either you can use the program called patch or, as this is a quite simple change, simply do what is shown using a text editor: remove the red line and add the green line (or just modify the line so that it looks like the green line afterwards).

  6. Toni Says:

    To the point! A good quick fix for the problem. Good that you also explained the root cause. I'm still wondering why the $before and $after are added to the function parameters and not outside of it?

  7. Alexander Kirk Says:

    What do you mean? The function qtrans_dateFromPostForCurrentLanguage provides a $before and $after parameter when the WordPress API doesn't ask it to provide it. When WordPress changed their API by adding parameters, the $before variable now gets some unexpected content (which previously always was an empty string, because of the default value $before = '')

  8. Sandrine Marquis Says:

    Works fine except two little detail. It's breaking my nextgen gallery plugin.

    Now it's telling me : Invalid Displayed Gallery Works fine if I disable qtranslate plugin.

    And the editor still not properly working.

  9. Recursos Web Says:

    Thank you very much! Solved! :-)

  10. Milan Says:

    Hi,

    fix is working for me, but all the headlines are gone ? :-/
    Anyone, any idea?

    thanks in advance for help...

    Milan

  11. Alexander Kirk Says:

    For all other problems it might be worth trying to switch to mqtranslate, a more actively maintained qtranslate fork.

  12. tititoto Says:

    Thanks you!