Tôi đã đặt blog thành một trang khác ngoài trang chủ.
Tôi muốn có một liên kết từ single.php đến trang blog này.
Có chức năng nào rút URL cho blog không?
Tôi đã đặt blog thành một trang khác ngoài trang chủ.
Tôi muốn có một liên kết từ single.php đến trang blog này.
Có chức năng nào rút URL cho blog không?
Câu trả lời:
Để xây dựng câu trả lời của Sagive, bạn sẽ muốn bọc ID trong get_permalink () để có được liên kết thực tế.
<a href="<?php echo get_permalink( get_option( 'page_for_posts' ) ); ?>">Our Blog</a>
Kể từ WordPress 4.5, bạn có thể sử dụng:
get_post_type_archive_link( 'post' );
Điều này xử lý logic nhận URL chính xác bất kể bài đăng có hiển thị trên trang chủ hoặc trong một trang được chỉ định hay không.
Cách tốt nhất để kiểm tra tùy chọn trước khi cài đặt permalink như sau:
if ( get_option( 'page_for_posts' ) ) {
echo '<a href="'.esc_url(get_permalink( get_option( 'page_for_posts' ) )).'">'.esc_html__( 'Blog', 'textdomain' ).'</a>';
} else {
echo '<a href="'.esc_url( home_url( '/' ) ).'">'.esc_html__( 'Blog', 'textdomain' ).'</a>';
}
Bạn có thể sử dụng get_option
của page_for_posts
để có được ID trang hoặc là gán nó vào một biến hoặc để echo nó nếu bạn muốn làm như vậy.
<?php $postsPageId = get_option('page_for_posts'); ?>
<a href="index.php?p=<?php echo $postsPageId; ?>">Our Blog</a>
Để biết thêm thông tin về chuyến thăm get_option không xác định: Tham khảo tùy chọn
Đồng ý với Hugh Man rằng tốt hơn là kiểm tra tùy chọn trước khi lặp lại liên kết, nhưng có thể đặt trang tĩnh làm trang đầu và để trống trang bài viết. Trong trường hợp này, liên kết sẽ chỉ đến URL nhà. Một cách tiếp cận tốt hơn là cung cấp dự phòng cho trang lưu trữ bài viết. Một cái gì đó như thế này:
function slug_all_posts_link() {
if ( 'page' == get_option( 'show_on_front' ) ) {
if ( get_option( 'page_for_posts' ) ) {
echo esc_url( get_permalink( get_option( 'page_for_posts' ) ) );
} else {
echo esc_url( home_url( '/?post_type=post' ) );
}
} else {
echo esc_url( home_url( '/' ) );
}
}
esc_url
sựget_permalink
vàhome_url
chức năng