web-dev-qa-db-ja.com

フロントベースを含むサイトのURLを取得する

私のパーマリンク構造が/blog/%postname%/に設定されている場合、どのように私は私のサイトのためにdomain.com/blog/を取得するURLを取得することができますか?

上記のパーマリンク構造で、site_url();を使用している場合、フロントベースを含むサイトのURLを簡単に取得しようとすると、domain.com/が表示されます。

「フロントベース」が実際には何なのか、私にはわかりません。

私はフロントベースがあなたの "パーマリンク構造"であるという印象の下にあります。 (オプションpermalink_structureに格納)

私はhome_url();site_url();を試してみました...両方ともちょうどdomain.com/を出力しました

私はsite_url();を使ってオプションpermalink_structureを取得し、オプションの内容を自分で解析してそれをsite_url();関数に追加することだけを考えています。

$permalink_structure = get_option('permalink_structure');
$front_base = preg_replace('#(\%)(.*)(\%/)#si', '', $permalink_structure);
echo site_url($front_base, 'http').PHP_EOL;

フロントベースを含むサイトのURLを取得するためのもっと簡単な方法はありますか?

7
Michael Ecklund

グローバルな$wp_rewritefrontの値を取得できます。

global $wp_rewrite;
echo $wp_rewrite->front;
// or
echo home_url( $wp_rewrite->front );

フロントベースは必ずしも既存のページとは限らず、多くの場合404となる可能性があるため、これはおそらく用途が限られています。その値を他のURLの先頭に追加するために使用している場合は、おそらく間違っているでしょう。

ページを投稿ページとして指定する場合は、その値がpage_for_postsオプションに格納されています。

echo get_permalink( get_option( 'page_for_posts' ) );
12
Milo

私は以下のような機能を提案しようとしていましたが、 それに直面することができます@ Miloの答えはほんの少し賢くなっています それで、完全性の理由と私はすでにそれを書き留めたからです。

function wpse163163_site_url_with_fix_permalink_base() {
    return 
        get_site_url()
        . '/'
        . preg_replace(
            '/\%([a-z0-9]+?)\%/i',
            '',
            str_replace(
                '/',
                '',
                get_option('permalink_structure')
            )
        )
        . '/';
}
4
Nicolai

このようなリンクを取得する必要があります。

<?php echo home_url( '/blog' ); ?>

または

<?php echo home_url( '/' ) . 'blog'; ?>
0
Robert hue