Why does running get_the_excerpt() when generating JSON file take 28 seconds vs. 599 milliseconds without it?

I am using the following code to generate a JSON feed. I need to extract the excerpt from posts, but when I run get_the_excerpt() it takes 28 seconds (yes SECONDS!) to run on my local server versus 599 milliseconds when I change get_the_excerpt() to ‘hi’.

Does anybody have any idea why this is taking so long and what I can do to get it to load faster? This is on my local web server on the computer I’m using so it isn’t due to a network issue.

$json = array();

while ( have_posts() ) {
  the_post();
  $yo = array('title' => get_the_title(), 'excerpt' => get_the_excerpt());
}

$json[] = $yo;
$json = json_encode($json);

Related posts

Leave a Reply

2 comments

  1. The problem will likely be a (very slow) callback that is attached to your get_the_excerpt() function.

    To inspect the attached callbacks, just inspect the global:

    // Best hooked to `shutdown`
    echo '<pre>'.var_export( $GLOBALS['wp_filters']['get_the_excerpt'], true ).'</pre>';
    

    Then get rid of all those callbacks.

  2. If you want to access the POST object directly, you can global $post and directly access the post object being used.

    while( have_posts() ){
        the_post();
    
        global $post;
        echo $post->post_excerpt;
    }
    

    If you are experiencing problems due to filters or anything else in the system, this should fix it.