Ini adalah kode yang saya buat berkat bantuan dari jawaban Wordpress StackOverflow yang tidak dapat saya temukan lagi (silakan beri komentar dengan tautan jika Anda menemukannya).
Pertama, Anda perlu menambahkan filter ke menu tertentu (Anda bisa menambahkannya ke semua menu jika Anda mau - cukup gunakan baris add_filter saja).
// Add filter to specific menus
add_filter('wp_nav_menu_args', 'add_filter_to_menus');
function add_filter_to_menus($args) {
// You can test agasint things like $args['menu'], $args['menu_id'] or $args['theme_location']
if( $args['theme_location'] == 'header_menu') {
add_filter( 'wp_setup_nav_menu_item', 'filter_menu_items' );
}
return $args;
}
Kemudian Anda perlu membuat kode untuk mendapatkan ID postingan atau kategori dari objek $item yang diteruskan ke filter. Ini tidak semudah yang Anda harapkan, karena $item tidak berisi ID postingan/kategori yang mendasarinya, hanya ID item menu. Jadi saya menggunakan URL untuk melakukan pencarian balik ID.
Ini tidak akan berfungsi untuk tag yang digunakan dalam menu, atau taksonomi khusus. Saya hanya membutuhkannya untuk kategori, jadi hanya ini yang saya buat.
// Filter menu
function filter_menu_items($item) {
if( $item->type == 'taxonomy') {
// For category menu items
$cat_base = get_option('category_base');
if( empty($cat_base) ) {
$cat_base = 'category';
}
// Get the path to the category (excluding the home and category base parts of the URL)
$cat_path = str_replace(home_url().'/'.$cat_base, '', $item->url);
// Get category and image ID
$cat = get_category_by_path($cat_path, true);
$thumb_id = get_term_meta($cat->term_id, '_term_image_id', true); // I'm using the 'Simple Term Meta' plugin to store an attachment ID as the featured image
} else {
// Get post and image ID
$post_id = url_to_postid( $item->url );
$thumb_id = get_post_thumbnail_id( $post_id );
}
if( !empty($thumb_id) ) {
// Make the title just be the featured image.
$item->title = wp_get_attachment_image( $thumb_id, 'poster');
}
return $item;
}
Dan kemudian Anda ingin menghapus filter yang Anda terapkan di awal, sehingga menu yang diproses selanjutnya tidak menggunakan HTML yang sama seperti yang didefinisikan di atas pada filter_menu_items().
// Remove filters
add_filter('wp_nav_menu_items','remove_filter_from_menus', 10, 2);
function remove_filter_from_menus( $nav, $args ) {
remove_filter( 'wp_setup_nav_menu_item', 'filter_menu_items' );
return $nav;
}
person
Drew Baker
schedule
27.09.2014