您必须扩展db查询才能在post_content
柱有一个过滤器:\'posts_where\'
您可以使用。
我会为get_posts()
要扩展其参数,请运行一次筛选器。示例:
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";
}
}
查找包含字符串的最后五篇帖子
resized 写入:
$args = array(
\'content\' => \'%resized%\'
);
$posts = T5_Posts_By_Content::get( $args );
获取最后五篇帖子
not 包含
resized:
$args = array(
\'content\' => \'%resized%\',
\'like\' => FALSE
);
$posts = T5_Posts_By_Content::get( $args );