Lấy URL trang web bao gồm cả cơ sở phía trước


7

Nếu cấu trúc permalink của tôi được đặt thành /blog/%postname%/, làm cách nào tôi có thể truy xuất URL cho trang web của mình để truy xuất domain.com/blog/?

Với cấu trúc permalink được đề cập ở trên, khi sử dụng site_url();, nó sẽ hiển thị domain.com/khi tôi muốn dễ dàng lấy URL của trang web bao gồm cả cơ sở phía trước.

Có lẽ tôi không rõ "căn cứ phía trước" thực sự là gì.

Tôi có ấn tượng rằng cơ sở phía trước là "Cấu trúc Permalink" của bạn. (Được lưu trong tùy chọn permalink_structure)

Tôi đã thử home_url();site_url();... Cả hai đầu ra chỉdomain.com/

Tôi đang suy nghĩ về việc chỉ sử dụng site_url();sau đó lấy ra tùy chọn permalink_structure, tự phân tích nội dung của tùy chọn, sau đó thêm nó vào site_url();chức năng.

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

Có cách nào dễ dàng hơn để lấy URL của trang web bao gồm cả cơ sở phía trước không?

Câu trả lời:


12

Bạn có thể nhận được giá trị fronttrong toàn cầu $wp_rewrite:

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

Mặc dù điều đó có thể được sử dụng hạn chế, vì cơ sở phía trước không nhất thiết phải là một trang hiện có và có thể 404 trong nhiều trường hợp. Nếu bạn đang sử dụng giá trị đó để thêm vào các URL khác, có thể bạn đã làm sai.

Nếu bạn muốn trang được chỉ định là trang bài viết, giá trị đó được lưu trữ trong page_for_poststùy chọn:

echo get_permalink( get_option( 'page_for_posts' ) );

4

Tôi đã định đề xuất một cái gì đó giống như chức năng dưới đây, nhưng hãy đối mặt với nó @ Câu trả lời của Milo chỉ thông minh hơn một chút , vì vậy chỉ vì lý do đầy đủ và vì tôi đã viết nó xuống.

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

Về cơ bản, có cùng một giải pháp, nhưng không thể hình thành nó :-)
Pieter Goosen

TBH Tôi đã có khá nhiều trong cửa hàng từ một trường hợp sử dụng khác nhưng tương tự. @PieterGoosen
Nicolai

Một chút gian lận không bao giờ làm tổn thương bất cứ ai :-) Thưởng thức
Pieter Goosen

0

Bạn sẽ phải nhận được liên kết như thế này.

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

hoặc là

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

À vâng. Lý tưởng nhất sẽ là tốt đẹp nếu bạn biết căn cứ phía trước là gì. Nếu bạn không biết căn cứ phía trước là gì? AKA hoạt động trong một plugin, cơ sở phía trước có thể khác nhau trên một số trang web sử dụng plugin. Đó là lý do tại sao tôi sẽ lấy nội dung của permalink_structuretùy chọn và tự phân tích nó, sau đó nối vào home_url();hoặc site_url();. Tôi chỉ tò mò nếu có một cách dễ dàng hơn.
Michael Ecklund

Thế thì không có cách nào. Hoặc cài đặt WordPress trong domain.com/blogthư mục.
Robert hue

1
Ngoài ra tại sao bạn cần phải có được căn cứ phía trước? Hầu hết thời gian, nếu bạn cần bao gồm các tập tin thì bạn có thể sử dụng ABSPATH.
Robert hue

Tôi có một plugin cần biết URL loại bài đăng và URL phân loại. Như bạn đã biết, các loại bài đăng và phân loại có thể có cơ sở phía trước được nối thêm.
Michael Ecklund
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.