I’d like to have the content of the current single post loaded into the og:description meta property – but the '. $content .'
doesn’t output anything?
This is what’s in my header.php
if (is_single()) {
$content = get_the_content();
$desc='<meta property="og:description" content="'. $content .'" />';
echo $desc;
}
What could the problem be?
get_the_content()
must be inside the loop, in header.php you can do this (don’t forget to scape the content to use it as attribute):or even better, in your functions.php hook the wp_head action; also, I recomend using the excerpt instead of the content as descriptoin. (note the use of global $post and setup_postdata).
See the codex page for
get_the_content()
:Emphasis on »Must be used in a Loop«.
Edit:
To give you a possible solution, you can use
get_post()
, for pages and posts, like shown below, to get the post content outside the loop.Update:
There is a pretty interesting comparison by Peter Knight regarding the Differences between using get_post() and WP_Query(). I can’t replicate it all, but basically it boils down to: performance and amount of available data. A short not at all conclusive and complete aggregation could be: on the one hand, with
WP_Query
you have the meta data too, not the case withget_post
, but on the other hand, withWP_Query
there are four database queries, whereas you have one database query usingget_post
. So there definitely are some differences to consider, read the article for more information, which method is right depends on what is needed for the actual use case on hand.