Saya telah sedikit memperluas jawaban tungd untuk memberikan lebih banyak kedermawanan dengan pendekatan itu. Implementasi ini memungkinkan penambahan pemetaan acak antara menu 'makro' dan URL Wordpress internal yang hanya diketahui oleh backend.
Saya juga memutuskan untuk menggunakan !
sebagai awalan untuk makro ini untuk menghindari bentrok dengan jangkar bernama - ini termasuk overhead untuk menghapus 'http: //' dari URL tautan (karena Wordpress akan berusaha untuk menormalkan tautan-tautan aneh ini) . Jika implementasi itu mengganggu Anda, Anda selalu dapat menghapus preg_replace()
panggilan dan menggunakan #
awalan tautan seperti sebelumnya.
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'));