web-dev-qa-db-fra.com

get_the_ID () donne un avis en page 404

J'utilise get_the_ID () dans mon action wp_enqueue_scripts en raison de certains besoins, mais le résultat est que la notification suivante (wp-debug est activée):

Avis: essayer d'obtenir la propriété de non-objet dans C:\wamp\www\WordPress\wp-includes\post-template.php à la ligne 29

Je sais pourquoi cela se produit, ma question est pourquoi cela devrait-il se produire? WordPress n'est-il pas censé savoir qu'il n'y a pas de $ post attribué à 404 et renvoyer un résultat vide?

Dois-je utiliser:

if( !is_object($post) ) return;

Partout, j'utilise get_the_ID () pour me débarrasser de cet avis?

7
metalzade

get_the_ID() est cassé.

function get_the_ID() {
    return get_post()->ID;
}

Il essaie d'utiliser le membre ID sur une fonction qui retourne un objet post parfois:

/* 
 * @return WP_Post|null WP_Post on success or null on failure
 */
function get_post( $post = null, $output = OBJECT, $filter = 'raw' ) {

get_posts() peut retourner NULL, et NULL n'a pas de membre ID, car ce n'est pas un objet.

Il n'y a pas d'objet global post sur une page 404. Et comme $post est une variable globale, elle peut être supprimée partout, même sur des pages simples.

Ainsi, chaque fois que vous utilisez get_the_ID(), vous devez tester un objet post.

if ( get_post() )
{
    $id = get_the_ID();
    // do something
}

Il y a deux leçons à apprendre ici:

  1. Ne faites jamais confiance à l'API WordPress. Lisez le code, comprenez ses limites.
  2. Évitez les variables globales dans votre propre code. Traitez chacun d'eux comme un bug sérieux et supprimez-le immédiatement.
8
fuxia

Vous pouvez vérifier si vous êtes dans une page 404:

if( is_404() ) {
    return;
}
get_the_ID();
// ...

Référence

is_404()

0
Pat J