私は投稿の詳細を取得するために以下のコードを見つけました。ただし、コンテンツで投稿を取得することはできません。誰かが何かアイデアを持っていますか?
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;
post_content
列を検索するには、dbクエリを拡張する必要があります。 'posts_where'
というフィルタがあります。
get_posts()
の引数を拡張してフィルタを1回実行するための単純なラッパーを作成します。例:
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";
}
}
文字列がサイズ変更されたを含む最後の5つの投稿を見つけるには、次のように書きます。
$args = array(
'content' => '%resized%'
);
$posts = T5_Posts_By_Content::get( $args );
最後の5つの投稿を取得するには含まないサイズ変更:
$args = array(
'content' => '%resized%',
'like' => FALSE
);
$posts = T5_Posts_By_Content::get( $args );
頭の上からうまくいく方法を考えることはできません。コア関数を使用しても可能かどうかはわかりませんが、使用するSQLは次のようになります(これは疑似コードです)。
SELECT `ID`
FROM `$wpdb->posts`
WHERE `post_content` LIKE '%search term%'
これは、SQLがあなたの検索語に関連していると考える投稿のすべてのIDを返します。