Shortcode output always showing at top of page

my shortcode output won’t appear where I put it, but rather at the top of the content (top of the post/page content).

And here is my code

Read More
function service_shortcode_index() {
global $content;
$output = include ( TEMPLATEPATH . '/service.php' );
return $output;
}

add_shortcode('service_mid', 'service_shortcode_index');

there are some regular HTML lists with widget in “service.php”

The content displays correctly, just in the wrong position.

Related posts

Leave a Reply

2 comments

  1. I think your problem is with the $output = include .... statement. include() returns true or false based whether it was successful – not the content of the file being included. Use output buffering to get the content.

    function service_shortcode_index() {
        global $content;
        ob_start();
        include ( TEMPLATEPATH . '/service.php' );
        $output = ob_get_clean();
        return $output;
    }
    
    add_shortcode('service_mid', 'service_shortcode_index');
    
  2. The problem is that the PHP function include (roughly speaking) echoes the content and then returns a boolean value.

    If you switch the include for file_get_contents then your $output will be a string of the file content rather than the boolean value indicating the success of the inclusion.

    Works for me with WordPress5.2 & PHP7.