J'utilise le code suivant pour afficher l'image sélectionnée, les post_titles et les données de champs personnalisés à partir de pages enfants pertinentes.
<?
$child_pages = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent = ".$post->ID." AND post_type = 'page' ORDER BY 'title ASC' ", 'OBJECT');
if ( $child_pages ) :
foreach ( $child_pages as $pageChild ) :
setup_postdata( $pageChild );
$thumbnail = get_the_post_thumbnail($pageChild->ID, 'thumbnail');
if($thumbnail == "") continue; // Skip pages without a thumbnail
?>
<div class="child-thumb">
<a href="<?= get_permalink($pageChild->ID) ?>" rel="bookmark" title="<?= $pageChild->post_title ?>">
<?= $thumbnail ?><br />
<?php echo get_post_meta($pageChild->ID, 'textfield', true); ?> </a><br /> <! -- Add riding-->
<?= $pageChild->post_title ?>
</div>
<?
endforeach;
endif;
?>
Cependant, il affiche également les pages enfants qui ont été supprimées. Comment puis-je l'empêcher de vérifier la corbeille et d'afficher les pages supprimées?
Je vous remercie!
Vous utilisez une requête SQL brute pour effectuer une requête de publication, ce qui est mauvais, car:
Intead, utilisez WP_Query
.
La raison pour laquelle vous recevez des publications supprimées est que vous ne spécifiez pas le statut de publication que vous souhaitez. Par défaut, WP_Query
n'est publié que par défaut.
Voici votre boucle de publication équivalente:
$query = new WP_Query( array(
'post_type' => 'page',
'post_parent' => $post->ID,
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC'
) );
if ( $query->have_posts() ) {
while( $query->have_posts() ) {
$query->the_post();
// process each post
}
}
À moins qu'il existe une très bonne raison (en règle générale, ou bien bien sûr, une incapacité des fonctions principales à faire ce dont vous avez besoin) pour utiliser des demandes SQL brutes afin de récupérer des publications et d'autres données dans WordPress, vous ne devez pas créer vos propres requêtes SQL. Au lieu de cela, vous pouvez utiliser WP_Query
. Dans votre cas, vous pouvez récupérer les messages comme ceci:
$query = new WP_Query( array(
'post_type' => 'page',
'post_parent' => $post->ID,
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC'
) );
$posts = $query->posts;
Le problème avec votre requête SQL est qu’elle ne tient pas compte du statut de la publication (trash
pour les publications mises à la corbeille). WP_Query
exclut automatiquement les publications supprimées (et les révisions, etc.), mais constitue avant tout une couche d'abstraction et présente de nombreux autres avantages, tels que le filtrage.
Utilisez get_posts () ou WP_Query pour les requêtes secondaires. Ils utiliseront le statut de publication 'publier' par défaut.
Si vous souhaitez toujours utiliser une requête personnalisée, ajoutez-lui le statut de publication.
$child_pages = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_status = 'publish' AND post_parent = ".$post->ID." AND post_type = 'page' ORDER BY 'title ASC' ", 'OBJECT');