web-dev-qa-db-fra.com

WP_Query par post ID ne fonctionne pas si post est dans post_status personnalisé

Je souhaite afficher un seul message par son ID à l'aide de WP_Query () . Pour ce faire, j'utilise l'argument suivant:

$args = array(
   'p' => 61202);

Cela devrait fonctionner, mais ne semble pas fonctionner si la publication est dans un post_status personnalisé.

Pour résoudre ce problème, j'ai essayé ce qui suit:

$args = array(
   'p' => 61202, // id of post
   'post_type' => 'any', // apply to all post types
   'post_status' => 'my_custom_status' // the custom post status
);

Mais cela ne fonctionne toujours pas. Pourquoi?!

Y a-t-il un bug connu? J'utilise ce code dans la zone wp-admin. Cela fonctionne correctement si la publication se trouve dans l’un des statuts de publication WP.

5
Christine Cooper

WP_Query a un bogue (# 29167) lorsque vous essayez de récupérer des publications avec (presque?) un autre statut que publish. Ce bug semble être corrigé dans le coffre. Je ne l’ai pas testé, je ne peux donc pas dire s’il couvre votre cas d’utilisation. Essayez-le et donnez-y votre avis si ce n’est pas le cas.

Il existe deux solutions de contournement:

  1. Utilisez get_post( $post_id ). Ceci exécute sa propre requête et n’est pas affecté par ce bogue.

  2. Utilisez une requête de base de données personnalisée si vous ne connaissez pas les ID de publication:

    $sql      = "SELECT * FROM $wpdb->posts WHERE post_status = %s AND post_type = %s";
    $prepared = $wpdb->prepare( $sql, $status, $post_type );
    $posts    = $wpdb->get_results( $sql );
4
fuxia