J'ai défini le blog comme une page différente de la page d'accueil.
Je veux avoir un lien de single.php vers cette page de blog.
Existe-t-il une fonction permettant d'extraire l'URL du blog?
Pour compléter la réponse de Sagive, vous devrez envelopper l'ID dans get_permalink () pour obtenir le lien réel.
<a href="<?php echo get_permalink( get_option( 'page_for_posts' ) ); ?>">Our Blog</a>
À partir de WordPress 4.5, vous pouvez utiliser:
get_post_type_archive_link( 'post' );
Cela gère la logique d'obtention de l'URL correcte, que les messages soient affichés sur la page d'accueil ou sur une page spécifiée.
La meilleure façon de vérifier l’option avant de définir le permalien est la suivante:
if ( get_option( 'page_for_posts' ) ) {
echo '<a href="'.esc_url(get_permalink( get_option( 'page_for_posts' ) )).'">'.esc_html__( 'Blog', 'textdomain' ).'</a>';
} else {
echo '<a href="'.esc_url( home_url( '/' ) ).'">'.esc_html__( 'Blog', 'textdomain' ).'</a>';
}
Vous pouvez utiliser get_option
sur page_for_posts
pour obtenir l'ID de page afin de l'affecter à une variable ou de lui donner un écho si vous le souhaitez.
<?php $postsPageId = get_option('page_for_posts'); ?>
<a href="index.php?p=<?php echo $postsPageId; ?>">Our Blog</a>
Pour plus d'informations sur defualt get_option, visitez: Référence de l'option
En accord avec Hugh Man, il est préférable de cocher cette option avant de faire écho au lien, mais il est possible de définir la page statique en tant que page de couverture et de laisser la page des messages vide. Dans ce cas, le lien pointe simplement vers l'URL de la maison. Une meilleure approche consiste à fournir un repli sur la page d’archive des articles. Quelque chose comme ça:
function slug_all_posts_link() {
if ( 'page' == get_option( 'show_on_front' ) ) {
if ( get_option( 'page_for_posts' ) ) {
echo esc_url( get_permalink( get_option( 'page_for_posts' ) ) );
} else {
echo esc_url( home_url( '/?post_type=post' ) );
}
} else {
echo esc_url( home_url( '/' ) );
}
}