Ben Dunkle
Ben Dunkle

Reputation: 320

<!--more--> being ignored when WordPress content is displayed

I'm trying to write a plugin that will take page id's and return a preview of the page. Here's my code:

function page_preview($atts,$pageid = null) {
extract(shortcode_atts(array(
"pageid" => '0'
), $atts));
$the_query = new WP_Query( 'page_id=' . $pageid . '' );
global $more;    
$more = 0;   
if ( $the_query->have_posts() ) {

while ( $the_query->have_posts() ) {
    $the_query->the_post();
    $title=get_the_title();
    $thumbnail=get_the_post_thumbnail( $pageid, 'preview' );
    $content=get_the_content();
}
} 
return '<div class="callout">' . 
'<h4>' . 
$title . 
'</h4>' . 
$thumbnail . 
$content . '<a href="' . 
get_the_permalink($pageid) . 
'">Continue reading</a></div>';
}
add_shortcode( 'pagepreview', 'page_preview' );

and it gets called on wpadmin editor like so: [pagepreview pageid=11][pagepreview pageid=13][pagepreview pageid=8054] i.e., that would display a page preview for each of those page ids.

The "more" doesn't work.

global $more;    
$more = 0; 

usually fixes this issue, but it's not in my case. Can anyone see what I"m doing wrong? Thanks.

Upvotes: 0

Views: 74

Answers (1)

vvanasten
vvanasten

Reputation: 951

You're getting the full content because

$content=get_the_content();

is not applying the_content() filters, and $more=0 must be on a line after $the_query->the_post(); inside the while loop. Change your while loop to this:

while ( $the_query->have_posts() ) {
    $the_query->the_post();
    $more=0;
    $title=get_the_title();
    $thumbnail=get_the_post_thumbnail( $pageid, 'preview' );
    $content = apply_filters( 'the_content', get_the_content() );
    $content = str_replace( ']]>', ']]&gt;', $content );
}

See get_the_content and read more in pages on the WordPress Codex for where I sourced this.

Upvotes: 1

Related Questions