web-dev-qa-db-fra.com

Récupérer uniquement les messages pour lesquels post_excerpt a été rempli

J'essaie d'utiliser get_posts pour ne renvoyer que les messages contenant un extrait. J'ai fait beaucoup de recherches et j'ai essayé d'utiliser le filtre "posts_where" sur la requête, mais mon SQL manque. C’est ce que j’utilise, ce qui, en théorie, devrait fonctionner, mais je n’ai vraiment aucune idée du code SQL et je ne sais pas comment imprimer la chaîne SQL pour le débogage de cette requête ...

$args = array(
    'post_type' => 'testimonial',
    'numberposts'     => 1,
    'orderby'         => 'Rand',
);

add_filter( 'posts_where' , 'posts_where_excerpt_not_empty' );

$post = get_posts($args);

remove_filter( 'posts_where' , 'posts_where_excerpt_not_empty' );

[...]

function posts_where_excerpt_not_empty( $where ) {
    $where .= " post_excerpt NOT NULL";
    return $where;
}
1
patnz

La colonne post_excerpt est une chaîne et ne peut pas être filtrée avec "IS NOT NULL". Pour rechercher une chaîne vide, vous pouvez utiliser l'opérateur !=.

function posts_where_excerpt_not_empty( $where ) {
    $where .= " AND post_excerpt != '' ";
    return $where;
}

De plus, get_posts supprime les filtres par défaut. Vous devrez donc l'appeler avec l'option de suppression des filtres définie sur false ou utiliser une autre méthode de requête.

$posts = get_posts( array( 'suppress_filters' => FALSE ) );
2
Chris_O

peut-être que je me trompe, mais ne ferons-nous pas une condition "vérifier si vide"?

<?php 
query_posts(array( 
'post_type' => 'testimonial',
'showposts' => 1,
'orderby' => 'Rand'
) );  

$checExcerpt = get_the_excerpt();
if !($checExcerpt = '') {
// Put the echo commands here
} else {
echo 'Sorry You forgot to enter Descriptions.. search engine love does!';
} ?>

.
Je pense que cela devrait se trouver dans la boucle de la page où vous souhaitez afficher le contenu extrait du chèque.

0
Sagive SEO