Nhận trang permalink mà không cần wpurl


8

Tôi hiện có ID của một trang mà tôi muốn sử dụng permalink của nó làm mặt trước cho phép của CPT mà tôi đang thiết lập.

Bây giờ tôi có thể sử dụng get_permalink () nhưng điều đó trả về URL đầy đủ:

http://www.example.com/imapage/subpage/subsubpage

nhưng tất cả những gì tôi muốn trở lại là imapage/subpage/subsubpage

Có một chức năng có thể làm điều này hay tôi phải thiết bị một cái gì đó có thể trừ đi phần không cần thiết của url?


Câu trả lời:


10

Không có gì được tích hợp để trả về bit bạn muốn nhưng nó sẽ dễ dàng như sử dụng hàm home_url () và loại bỏ đầu ra của nó khỏi url đầy đủ, ví dụ:

function get_relative_permalink( $url ) {
    return str_replace( home_url(), "", $url );
}

Tôi đã đến cùng một đoạn mã nhưng hy vọng một số chức năng đã có trong lõi trả về nó theo cách tôi muốn.
Scott

Điều đó sẽ dẫn đến các giá trị có thể bất ngờ cho multisite hoặc với WordPress được cài đặt trong thư mục con.
David

15

Thực sự có một chức năng cốt lõi cho việc này bây giờ. wp_make_link_relative($url)

Chuyển đổi đường dẫn URL đầy đủ sang đường dẫn tương đối.

Xóa các giao thức http hoặc https và tên miền. Giữ đường dẫn '/' ở đầu, vì vậy nó không phải là một liên kết tương đối thực sự, mà là từ cơ sở gốc web.

Thí dụ

<?php echo wp_make_link_relative('http://localhost/wp_test/sample-page/'); ?>

Điều này sẽ xuất /wp_test/sample-page/

Ví dụ với ID bài <?php echo wp_make_link_relative(get_permalink( $post->ID )); ?>

Ví dụ cho bài viết hiện tại <?php echo wp_make_link_relative(get_permalink()); ?>

Thông tin thêm về điều này có thể được tìm thấy trong các tài liệu .


1
Câu trả lời này phải được đánh dấu là đúng, bởi vì nó sử dụng chức năng trợ giúp tích hợp của WordPress Core: developer.wordpress.org/reference/fifts/
mặt trời

không phải là quyết định tốt nhất, bởi vì nếu bạn đã bắt đầu WP của mình trong localhost thông qua MAMP và bạn có nhiều dự án trên localhost / *, câu trả lời wp_make_link_relative(get_permalink())sẽ là/wp_dir/category_slug
Gediminas

4

Bạn sẽ không thể sử dụng get_permalink()cho điều đó.

Nếu bạn đào sâu vào mã cho chức năng đó, /wp-includes/link-template.phpbạn sẽ thấy lý do tại sao. Sau khi cấu trúc permalink được phân tích cú pháp và chuẩn bị, mã thực hiện điều này:

$permalink = home_url( str_replace($rewritecode, $rewritereplace, $permalink) );

Điều này được thực hiện ngay sau khi cấu trúc của liên kết được tạo và trước khi mọi thứ được chuyển qua bộ lọc hữu ích.

Thật không may, bạn sẽ phải tự trích xuất phần không cần thiết của URL. Tôi khuyên bạn nên sử dụng str_replace()chức năng mà @sanchothefat đề xuất.


3

$path = parse_url(get_permalink(...), PHP_URL_PATH);... chỉ cung cấp URL PATH . Điều này không liên quan đến root blog mà là tên miền. Đó là URI tuyệt đối.

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.