I found the following codes to get post details.
However, it is not possible to get the posts by content.
Does any one has any ideas?
get_posts()
//// get post ////
$args = array(
'numberposts' => -1, // number of posts to display; display all: -1.
'offset' => 0,
// 'category' => , // post category ID
'orderby' => 'post_date',
'order' => 'DESC', // Latest post first: 'ASC'; Olderest post first: 'DESC'
// 'include' => ,
// 'exclude' => ,
// 'meta_key' => ,
// 'meta_value' => ,
'post_type' => 'post', // get post type
// 'post_mime_type' => ,
// 'post_parent' => ,
// 'post_status' => 'publish'
);
// http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters
$posts_array = get_posts( $args );
foreach( $posts_array as $post ) : setup_postdata($post);
echo "<li><a href="" . the_permalink() . "">" . the_title() .
"</a>" .
$post->blog_ID .
$post->post_date .
$post->post_title .
$post->pubtimes .
$post->post_author .
$post->post_content .
$post->post_excerpt .
$post->post_status;
"</li>";
endforeach;
You have to extend the db query to search in the post_content
column. There is a filter: 'posts_where'
you can use.
I would write a simple wrapper for get_posts()
to extends its arguments an run the filter once. Example:
class T5_Posts_By_Content
{
protected static $content="";
protected static $like = TRUE;
/**
* Mapper for get_posts() with extra arguments 'content' and 'like'
*
* 'content' must be a string with optional '%' for free values.
* 'like' must be TRUE or FALSE.
*
* @param array $args See get_posts.
* @return array
*/
public static function get( $args )
{
if ( isset ( $args['content'] ) )
{
// This is TRUE by default for get_posts().
// We need FALSE to let the WHERE filter do its work.
$args['suppress_filters'] = FALSE;
self::$content = $args['content'];
add_filter( 'posts_where', array ( __CLASS__, 'where_filter' ) );
}
isset ( $args['like'] ) and self::$like = (bool) $like;
return get_posts( $args );
}
/**
* Changes the WHERE clause.
*
* @param string $where
* @return string
*/
public static function where_filter( $where )
{
// Make sure we run this just once.
remove_filter( 'posts_where', array ( __CLASS__, 'where_filter' ) );
global $wpdb;
$like = self::$like ? 'LIKE' : 'NOT LIKE';
// Escape the searched text.
$extra = $wpdb->prepare( '%s', self::$content );
// Reset vars for the next use.
self::$content="";
self::$like = TRUE;
return "$where AND post_content $like $extra";
}
}
To find the last five posts containing the string resized write:
$args = array(
'content' => '%resized%'
);
$posts = T5_Posts_By_Content::get( $args );
To get the last five posts not containing resized:
$args = array(
'content' => '%resized%',
'like' => FALSE
);
$posts = T5_Posts_By_Content::get( $args );