সেই পদ্ধতির সাথে আরও উদারতা দেওয়ার জন্য আমি টুংডের উত্তরে কিছুটা প্রসারিত করেছি । এই প্রয়োগটি মেনু 'ম্যাক্রোস' এবং অভ্যন্তরীণ ওয়ার্ডপ্রেস ইউআরএলগুলির মধ্যে স্বেচ্ছাসেবী ম্যাপিং যোগ করার অনুমতি দেয় যা কেবলমাত্র ব্যাকএন্ড সম্পর্কে জানে।
!নামযুক্ত অ্যাঙ্করগুলির সাথে সংঘর্ষ এড়াতে আমি এই ম্যাক্রোগুলির উপসর্গ হিসাবে ব্যবহার করার সিদ্ধান্ত নিয়েছি - এর মধ্যে লিঙ্ক ইউআরএল থেকে 'http: //' কেটে ফেলার জন্য একটি ওভারহেড অন্তর্ভুক্ত রয়েছে (ওয়ার্ডপ্রেস এই অদ্ভুত লিঙ্কগুলি স্বাভাবিক করার চেষ্টা করবে) । যদি সেই বাস্তবায়ন আপনাকে বিরক্ত করে, আপনি সর্বদা 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'));