获取包含前基座的站点URL

时间:2014-10-01 作者:Michael Ecklund

如果我的permalink结构设置为/blog/%postname%/, 如何检索网站的URLdomain.com/blog/?

使用上述permalink结构时site_url();, 它显示domain.com/ 当我想轻松获得网站的URL时,包括前台。

也许我不清楚“前线基地”到底是什么。

我的印象是,前基座是你的“永久性结构”。(存储在选项中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?

3 个回复
最合适的回答,由SO网友:Milo 整理而成

您可以获得front 在全球范围内$wp_rewrite:

global $wp_rewrite;
echo $wp_rewrite->front;
// or
echo home_url( $wp_rewrite->front );
虽然这可能是有限的使用,因为前面的基础不一定是现有的页面,在许多情况下可能是404。如果您使用该值作为其他URL的前缀,那么很可能是做错了。

如果希望将页面指定为posts页面,则该值存储在page_for_posts 选项:

echo get_permalink( get_option( \'page_for_posts\' ) );

SO网友:Nicolai Grossherr

我正要提出类似下面的函数,但让我们面对它@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\')
            )
        )
        . \'/\';
}

SO网友:Robert hue

你必须得到这样的链接。

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

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

结束

相关推荐

Tag URLs load a single post

在网站被破坏后,我最近重建了WordPress安装(维护数据库,替换WordPress/插件/主题文件)。除了标记链接外,它现在或多或少正常工作:http://www.foo.com/tag/bar 转发到标记为的帖子bar, 而不是显示标记为bar.我已经换了。从选项->永久链接中新生成一个htaccess,但无效。Google指出,DB缓存也出现了类似的问题,我还没有安装DB缓存。有什么想法吗?