web-dev-qa-db-fra.com

Pourquoi `url_to_postid` est-il renvoyé lors du test de la page` page_for_posts`?

Si je définis Paramètres de lecture > Posts Page (en d'autres termes, le page_for_posts) sur une page statique, puis tentez de transmettre son URL via url_to_postid(), il renverra 0 - pourquoi?

Je comprends que ce n’est techniquement plus une page statique/postale, c’est la page posts, mais cette page a toujours un identifiant et j’ai toujours besoin de l’obtenir. Assez drôle, je dois obtenir l'ID pour pouvoir vérifier si est la même valeur que page_for_posts. Je ne peux pas utiliser le 0 renvoyé par la fonction url_to_postid car 0 peut être renvoyé pour plusieurs raisons.

Est-ce que quelqu'un sait comment je peux tester l'URL actuelle pour obtenir son ID, quand il est défini sur la page page_for_posts?

2
Jody Heavener

La raison pour laquelle vous obtenez 0 en retour est due au test à la fin de la fonction:

if ( ! empty( $query->posts ) && $query->is_singular )
    return $query->post->ID;
else
    return 0;

La page des messages ne réussissant pas le test is_singular, 0 est renvoyé.

Si vous avez une URL et que vous voulez savoir s'il s'agit de la page de publication, vous pouvez la faire correspondre au lien permanent renvoyé par get_permalink lorsque l'option page_for_posts est passée:

$page_for_posts_url = get_permalink( get_option( 'page_for_posts' ) );
if( $current_url == $page_for_posts_url ) echo 'this is the page for posts!';
2
Milo

La page des messages n'est pas une page . Par exemple, définissez une page avec un modèle de page comme page de messages et vous n'obtiendrez pas le modèle de page. Au lieu de cela, vous verrez probablement archive.php ou index.php, car la boucle/requête principale ne charge pas une page, elle charge l'archive principale de publication.

D'où ce code:

if ( ! empty( $query->posts ) && $query->is_singular )
    return $query->post->ID;
else
    return 0;

Lorsque vous êtes sur la page d'articles, is_singular est faux, car il s'agit d'une page d'archive et non d'une page d'article.

Ainsi, il n'y a pas de publication à cette URL, et donc 0 est approprié, car c'est un code d'erreur n'indiquant aucune publication.

0
Tom J Nowell

Jetez un coup d'oeil à cette fonction, cela peut être utile. Fonction WP get_page_by_path ()

0
Arnis