I've transferred an ExpressionEngine site from the staging server to live but now I'm getting the following error for pretty much any {exp:channel:entries} tag:

Severity: Warning

Message: call_user_func() expects parameter 1 to be a valid callback, no array or string given

Filename: channel_entries_parser/Parser.php

Line Number: 380

Here is one of the tags causing it:

{exp:channel:entries dynamic="no" channel="blog_post" limit="10"}

The differences between the servers are:

  • Staging: PHP Version 5.4.35 Live: PHP Version 5.4.45

  • Staging: Apache Version Apache/2.2.15 (CentOS) Live: Apache Version Apache/2.2.17 (Atomic)

EE v2.10.2 Addons: cache_buster, ed_imageresizer, ep_better_workflow, excerpt, fieldpack, freebie, freeform, freeform_campaign_monitor_hook, index.html, lamplighter, list.txt, low_seg2cat, mx_cloner, reefine, reelocate, republic_structure_tweaks, stash, structure, structure_nav, structure_page_exists, switchee, trunchtml, url_tube, wygwam

2 Answers 2


Looks like the problem is originating from system/expressionengine/modules/channel/mod.channel.php line 2343 which returns a Closure for tagdata_loop_end and the live server doesn't understand Closures for some reason. I've added an if to line 380 in Parser.php so it ignores the Closure as a temporary workaround:

if (is_callable($callbacks['tagdata_loop_end'])) $tagdata = call_user_func($callbacks['tagdata_loop_end'], $tagdata, $row);

If such a vanilla Channel Entries tag on a template by itself is causing that error, I'd start disabling add-ons until the error goes away. In that list of add-ons are many with extensions that could be creating unexpected behavior.

Start by heading to Add-ons > Extensions and clicking the "Disable Extensions" button on the top right. Access that front end reduction template again and see if the error persists. If it doesn't, then you can re-enable extensions and try disabling them one at a time until you find the culprit. If you browse your exp_extensions table, in this case the most likely extensions are going to have hooks using channel_entries_tagdata_end.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.