私のパーマリンク構造が/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を取得するためのもっと簡単な方法はありますか?
グローバルな$wp_rewrite
でfront
の値を取得できます。
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' ) );
私は以下のような機能を提案しようとしていましたが、 それに直面することができます@ 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')
)
)
. '/';
}
このようなリンクを取得する必要があります。
<?php echo home_url( '/blog' ); ?>
または
<?php echo home_url( '/' ) . 'blog'; ?>