ดูเหมือนคำถามโง่ ๆ แต่ฉันไม่สามารถคิดออก :(
ฉันต้องแสดงปุ่มที่บ้านที่ไปที่ URL เก็บถาวรของ post_type (archive- {post_type} .php) ฉันจะทำอย่างไร
ดูเหมือนคำถามโง่ ๆ แต่ฉันไม่สามารถคิดออก :(
ฉันต้องแสดงปุ่มที่บ้านที่ไปที่ URL เก็บถาวรของ post_type (archive- {post_type} .php) ฉันจะทำอย่างไร
คำตอบ:
สวัสดี@Silent:
ปรากฎว่ามีฟังก์ชั่นใน WordPress 3.1 ที่ทำสิ่งที่คุณต้องการอย่างแน่นอนและมีชื่อget_post_type_archive_link()
; นี่คือวิธีที่คุณจะเรียกมัน(สมมติว่ามีประเภทโพสต์ที่กำหนดเอง'product'
):
<a href="<?php echo get_post_type_archive_link('product'); ?>">Products</a>
ด้านล่างคือคำตอบก่อนหน้าของฉันก่อนที่ฉันจะค้นพบว่า WordPress มีฟังก์ชั่นในตัวสำหรับกรณีการใช้งานนี้
นอกจากว่าฉันมองข้ามบางอย่างในซอร์สโค้ดหลักสำหรับ WordPress 3.1 ฉันคิดว่าคุณกำลังมองหาฟังก์ชั่นget_archive_link()
ที่คุณอาจเรียกได้ว่าเป็นแบบนี้(สมมติว่ามีชื่อโพสต์แบบกำหนดเอง'product'
):
<a href="<?php echo get_archive_link('product'); ?>">Products</a>
และนี่คือซอร์สโค้ดที่คุณสามารถวางลงในfunction.php
ไฟล์ธีมของคุณหรือใน.php
ไฟล์สำหรับปลั๊กอินที่คุณอาจกำลังเขียน:
if (!function_exists('get_archive_link')) {
function get_archive_link( $post_type ) {
global $wp_post_types;
$archive_link = false;
if (isset($wp_post_types[$post_type])) {
$wp_post_type = $wp_post_types[$post_type];
if ($wp_post_type->publicly_queryable)
if ($wp_post_type->has_archive && $wp_post_type->has_archive!==true)
$slug = $wp_post_type->has_archive;
else if (isset($wp_post_type->rewrite['slug']))
$slug = $wp_post_type->rewrite['slug'];
else
$slug = $post_type;
$archive_link = get_option( 'siteurl' ) . "/{$slug}/";
}
return apply_filters( 'archive_link', $archive_link, $post_type );
}
}
ฉันทำงานกับตรรกะนี้จริง ๆ ในช่วงสุดสัปดาห์ถึงแม้ว่าฉันจะยังไม่แน่ใจ 100% ว่าลำดับของตรรกะนั้นถูกต้องโดยทั่วไปในทุกกรณีการใช้งานที่ WordPress อาจเห็นแม้ว่ามันอาจจะใช้ได้กับบางไซต์ก็ตาม
นี่เป็นสิ่งที่ยอดเยี่ยมที่จะแนะนำให้เพิ่มลงใน WordPress ผ่านtracซึ่งฉันคิดว่าฉันจะทำต่อไปในเย็นวันนี้
เมื่อคุณลงทะเบียนประเภทโพสต์คุณสามารถส่งสตริงเป็นกระสุนด้วยพารามิเตอร์ "has_archive" และตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าการเขียนเป็นจริงหรืออาร์เรย์ แต่ไม่ใช่เท็จและ URL เก็บถาวร CPT ของคุณจะเป็นhttp://www.YOURDOMAIN.com / has_archive_slugตัวอย่างเช่น
หากคุณตั้งค่าใน register_post_type ของคุณตัวอย่างเช่น:
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => 'product',
'capability_type' => 'post',
'has_archive' => 'products',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','author','thumbnail','excerpt','comments')
);
register_post_type('product',$args);
ดังนั้น URL เดียวของคุณคือ: http://www.YOURDOMAIN.com/product/postName และ URL ที่เก็บถาวรของคุณคือ: http://www.YOURDOMAIN.com/products/
has_archive
เป็นบูลีน แต่ตอนนี้ฉันรู้แล้วว่าสามารถรับสตริงได้ดังนั้นโพสต์ที่กำหนดเองเอกพจน์ของฉันrecipe
สามารถมีกระสุนจำนวนมาก/recipes/
'rewrite'
ยอมรับเฉพาะค่าบูลีนหรืออาร์เรย์ มากกว่าที่คุณมีอยู่ก็ควรจะเป็น'rewrite' => 'product',
'rewrite' => array( 'slug' => 'product' ),
yoursite.com/type-slug
เว้นแต่คุณจะกำหนดเป็นอย่างอื่นเช่นyoursite.com/some-other-url
..