Saat ini saya menggunakan walker khusus untuk menyesuaikan output wp_nav_menu()
, dan saya mencoba menambahkan informasi tambahan ke <a>
tag.
Apa yang saya ingin output untuk setiap tautan menu terlihat seperti:
<a class="boxPAGEID" href="#">About Me Page</a>
Di mana PAGEID
ID halaman yang saya tautkan.
Alasannya adalah karena saya mengembangkan tema yang membuka konten halaman di lightbox, yang dipicu oleh kelas dalam tag.
Di bawah ini adalah kode custom walker di functions.php
file saya (setelah kode saya akan menunjuk ke area di mana saya mengalami masalah):
class description_walker extends Walker_Nav_Menu
{
function start_el(&$output, $item, $depth, $args)
{
global $wp_query;
$pageid = $wp_query->post->ID;
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
$class_names = ' class="'. esc_attr( $class_names ) . '"';
$output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';
$attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
$attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
$attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
$attributes .= ! empty( $item->url ) ? ' href="' . '#' .'"' : '';
$prepend = '<strong>';
$append = '</strong>';
$description = ! empty( $item->description ) ? '<span>'.esc_attr( $item->description ).'</span>' : '';
if($depth != 0)
{
$description = $append = $prepend = "";
}
$item_output = $args->before;
$item_output .= '<a'. $attributes . 'class="box' . $pageid . '"' .'>';
$item_output .= $args->link_before .$prepend.apply_filters( 'the_title', $item->title, $item->ID ).$append;
$item_output .= $args->link_after;
$item_output .= '</a>';
$item_output .= $args->after;
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
if ($item->menu_order == 1) {
$classes[] = 'first';
}
}
}
Menjelang akhir adalah beberapa garis yang dimulai dengan $item_output
. Baris kedua adalah tempat saya mencoba membuat ID halaman:
$item_output .= '<a'. $attributes . 'class="box' . $pageid . '"' .'>';
Di mana $pageid
menurut:
global $wp_query;
$pageid = $wp_query->post->ID;
Ini memberi saya satu ID tetap untuk semua tautan yang dibuat.
Atau, alih-alih $pageid
saya mencoba menggunakan $item->ID
, tetapi itu memberi saya ID dari item menu sebagai gantinya.
Ada saran?
Jawaban:
ID halaman (atau ID objek, karena item menu dapat menautkan ke objek apa pun) disimpan dalam
postmeta
tabel, dengan kunci_menu_item_object_id
. Jadi Anda bisa mendapatkan ID halaman dengan kode berikut:sumber
$pageid = $wp_query->post->ID;
bagian atas halaman menjadi$pageid = get_post_meta( $item->ID, '_menu_item_object_id', true );
Saya tidak bisa melihat kode Anda secara mendalam tetapi untuk membuat menu mungkin Anda harus menggunakan get_pages ..
http://codex.wordpress.org/Function_Reference/get_pages
sumber