web-dev-qa-db-ja.com

オプションで設定したブログページのURLを取得する

私はブログをホームページ以外の別のページに設定しました。

私はsingle.phpからこのブログページへのリンクを持ちたいです。

ブログのURLを取り出す機能はありますか?

Sagiveの答えを基にするには、実際のリンクを取得するためにget_permalink()でIDをラップします。

<a href="<?php echo get_permalink( get_option( 'page_for_posts' ) ); ?>">Our Blog</a>
65
Bill Erickson

WordPress 4.5以降では、次のものを使用できます。

get_post_type_archive_link( 'post' );

これは、投稿がホームページに表示されるのか、特定のページに表示されるのかに関係なく、正しいURLを取得するロジックを処理します。

20
SeventhSteel

パーマリンクを設定する前にオプションをチェックする最善の方法は次のとおりです。

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>';
}
4
Hooman Askari

ページIDを取得するためにget_optionpage_for_postsを使用すると、それを変数に割り当てることも、必要に応じてエコーすることもできます。

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

デフォルトのget_optionの詳細については、次のWebサイトを参照してください。 オプションリファレンス

3
Sagive SEO

Hugh Man氏に同意すると、リンクを表示する前にこのオプションをチェックしたほうが良いのですが、静的ページをフロントページとして設定し、投稿ページを空のままにすることは可能です。この場合、リンクはホーム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( '/' ) );
    }
}
1
Dmitry Mayorov