Получить URL страницы блога, установленный в настройках

38

Я установил для блога другую страницу, отличную от домашней.

Я хочу иметь ссылку с single.php на эту страницу блога.

Есть ли какая-нибудь функция, которая вытягивает URL для блога?

Атиф Мухаммед Аминуддин
источник

Ответы:

71

Чтобы основываться на ответе Сагива, вам нужно обернуть идентификатор в get_permalink (), чтобы получить фактическую ссылку.

<a href="<?php echo get_permalink( get_option( 'page_for_posts' ) ); ?>">Our Blog</a>
Билл Эриксон
источник
25

Начиная с WordPress 4.5 вы можете использовать:

get_post_type_archive_link( 'post' );

Это обрабатывает логику получения правильного URL независимо от того, отображаются ли сообщения на домашней странице или на указанной странице.

SeventhSteel
источник
4

Лучший способ проверить параметр перед установкой постоянной ссылки заключается в следующем:

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>';
}
Хуман Аскари
источник
3

Вы можете использовать get_optionдля того page_for_postsчтобы получить идентификатор страницы либо присвоить его переменной или повторить его , если вы хотите , чтобы сделать это.

<?php $postsPageId = get_option('page_for_posts'); ?>
<a href="index.php?p=<?php echo $postsPageId; ?>">Our Blog</a>

Для получения дополнительной информации о посещении по умолчанию get_option: Опция Reference

Сагив SEO
источник
1

Согласитесь с Хью Маном, что перед повторением ссылки лучше проверить этот параметр, но можно установить статическую страницу в качестве главной страницы и оставить страницу постов пустой. В этом случае ссылка будет просто указывать на домашний URL. Лучший подход - предоставить запасной вариант к странице архива сообщений. Что-то вроде этого:

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( '/' ) );
    }
}
Дмитрий Майоров
источник
Вы не должны esc_urlв get_permalinkи home_urlфункции
Tolea Bivol