web-dev-qa-db-fra.com

Impossible de récupérer les publications de CPT dans wp-admin

J'ai un site avec quelques types de messages personnalisés. Ceux-ci sont tous enregistrés d'une manière très similaire partageant la plupart des attributs:

const ARGS = [
    'hierarchical'          => true,
    //'public'                => true,
    'show_ui'               => true,
    'show_in_menu'          => true,
    'menu_position'         => 5,
    'show_in_admin_bar'     => true,
    'show_in_nav_menus'     => true,
    'can_export'            => true,
    'has_archive'           => true,
    'exclude_from_search'   => false,
    //'publicly_queryable'    => true,
    'capability_type'       => 'page',
    'show_in_rest'          => false,
];

Par exemple, les CPT order et person sont enregistrés comme ceci

private static function register_order()
{
    $args = array_merge(
        [
            'label'                 => __( 'order', 'X' ),
            'labels'                => [...],
            'supports'              => ['title', 'editor', 'author'],
        ],
        self::ARGS
     );

    register_post_type( 'order', $args );
}

private static function register_person()
{
    $args = array_merge(
        [
            'label'                 => __( 'person', 'X' ),
            'labels'                => [...],
            'supports'              => ['title', 'author'],
        ],
        self::ARGS
    );

    register_post_type( 'person', $args );
}

Cependant, quand je suis dans le wp-admin, je ne vois actuellement que persons alors que orders me donne une liste vide.

enter image description here

En déboguant ceci avec la barre de débogage et le moniteur de requêtes, j'obtiens la requête principale suivante pour order (rédigé le post_status pour les deux requêtes)

SELECT wp_posts.ID, wp_posts.post_parent
FROM wp_posts 
WHERE 1=1 
AND (wp_posts.ID = '0')
AND wp_posts.post_type = 'order'
AND (...) 
ORDER BY wp_posts.menu_order ASC, wp_posts.post_title ASC

Et la requête pour person est

SELECT wp_posts.ID, wp_posts.post_parent
FROM wp_posts 
WHERE 1=1 
AND wp_posts.post_type = 'person'
AND (...) 
ORDER BY wp_posts.menu_order ASC, wp_posts.post_title ASC

Maintenant, je comprends assez bien SQL pour savoir que cette ligne

AND (wp_posts.ID = '0')

c'est la raison pour laquelle je n'obtiens aucun résultat. Je n'ai juste aucune idée de pourquoi c'est là. Je n'ai pas de hook pre_get_posts défini, j'ai désactivé tous les plugins sauf celui-ci, pas de changement.

1
kero

Comme mmm a souligné dans les commentaires , order ne doit pas être utilisé comme un nom pour un type de message personnalisé, car il peut "interférer avec d'autres fonctions de WordPress". En savoir plus dans le Codex :

Types de messages réservés Les types de messages suivants sont réservés et déjà utilisés par WordPress.

  • post
  • page
  • attachment
  • revision
  • nav_menu_item
  • custom_css
  • customize_changeset

En outre, les types de publication suivants ne doivent pas être utilisés car ils interfèrent avec d'autres fonctions de WordPress.

  • action
  • author
  • order
  • theme
1
kero