ฉันได้ขยายคำตอบของ tungd ไปเล็กน้อยเพื่อให้แนวทางที่ชัดเจนยิ่งขึ้น การใช้งานนี้ช่วยให้สามารถเพิ่มการแมปตามอำเภอใจระหว่างเมนู 'มาโคร' และ URL เวิร์ดเพรสภายในที่เฉพาะแบ็คเอนด์เท่านั้นที่รู้
ฉันยังได้ตัดสินใจที่จะใช้!
เป็นคำนำหน้าสำหรับมาโครเหล่านี้เพื่อหลีกเลี่ยงการชนกับแองเคอร์ที่มีชื่อ - ซึ่งรวมถึงค่าใช้จ่ายในการถอด 'http: //' จาก URL ลิงก์ (เนื่องจาก Wordpress จะพยายามทำให้ลิงก์แปลก ๆ เหล่านี้เป็นปกติ) . หากการติดตั้งนั้นรบกวนคุณคุณสามารถลบการpreg_replace()
โทรออกและใช้#
เป็นคำนำหน้าลิงก์ของคุณเหมือนเดิม
class Extendable_Menu_Walker extends Walker_Nav_Menu
{
protected static $custom_urls = array();
public static function setupUrls()
{
// calls to self::mapPostType($postTypeName) and
// self::createMapping($wildcard, $url) go here...
}
public function start_el(&$output, $item, $depth=0, $args=array(), $id=0)
{
$url = preg_replace('@^https?://@', '', $item->url);
if (isset( self::$custom_urls[ $url ] )) {
$item->url = self::$custom_urls[ $url ];
}
parent::start_el($output, $item, $depth, $args, $id);
}
public static function createMapping($urlKey, $realUrl)
{
self::$custom_urls['!' . $urlKey] = $realUrl;
}
public static function mapPostType($type)
{
self::createMapping('post_type_' . $type, get_post_type_archive_link($type));
}
}
add_action('init', array('Extendable_Menu_Walker', 'setupUrls'));