J'ai trouvé les codes suivants pour obtenir les détails de la publication. Cependant, il n'est pas possible d'obtenir les messages par contenu . Est-ce que quelqu'un a des idées?
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;
Vous devez étendre la requête de base de données pour rechercher dans la colonne post_content
. Il existe un filtre: 'posts_where'
que vous pouvez utiliser.
J'écrirais un simple wrapper pour get_posts()
afin d'étendre ses arguments et d'exécuter le filtre une fois. Exemple:
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";
}
}
Pour trouver les cinq derniers articles contenant la chaîne redimensionnée , écrivez:
$args = array(
'content' => '%resized%'
);
$posts = T5_Posts_By_Content::get( $args );
Pour obtenir les cinq derniers articles non contenant redimensionnés :
$args = array(
'content' => '%resized%',
'like' => FALSE
);
$posts = T5_Posts_By_Content::get( $args );
Je ne peux pas penser à une façon élégante de penser, je ne suis pas sûr que ce soit même possible d'utiliser des fonctions de base, mais le SQL que vous voudriez utiliser ressemblerait à ceci (notez qu'il s'agit d'un pseudocode):
SELECT `ID`
FROM `$wpdb->posts`
WHERE `post_content` LIKE '%search term%'
Cela renverra tous les identifiants des publications que SQL pense liées à votre terme de recherche.