Actualmente estoy usando un andador personalizado para personalizar la salida de wp_nav_menu()
, y estoy tratando de agregar información adicional a las <a>
etiquetas.
Lo que quiero es que se vea el resultado de cada enlace de menú:
<a class="boxPAGEID" href="#">About Me Page</a>
¿Dónde PAGEID
está la identificación de la página a la que estoy enlazando?
La razón es porque estoy desarrollando un tema que abre el contenido de la página en cajas de luz, que son activadas por la clase en la etiqueta.
A continuación se muestra el código del andador personalizado en mi functions.php
archivo (después del código señalaré el área donde tengo problemas):
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';
}
}
}
Hacia el final hay un par de líneas que comienzan con $item_output
. La segunda línea es donde estoy tratando de generar la ID de la página:
$item_output .= '<a'. $attributes . 'class="box' . $pageid . '"' .'>';
¿Dónde $pageid
está de acuerdo con:
global $wp_query;
$pageid = $wp_query->post->ID;
Esto me da una identificación única y fija para todos los enlaces generados.
Alternativamente, en lugar de $pageid
intentar usarlo $item->ID
, pero eso me dio la ID del elemento del menú.
¿Alguna sugerencia?
Respuestas:
El ID de la página (o ID del objeto, ya que un elemento de menú puede vincularse a cualquier objeto) se almacena en la
postmeta
tabla, con la clave_menu_item_object_id
. Para que pueda obtener la ID de la página con el siguiente código:fuente
$pageid = $wp_query->post->ID;
en la parte superior de la página a$pageid = get_post_meta( $item->ID, '_menu_item_object_id', true );
No pude ver tu código en profundidad, pero para crear un menú quizás deberías usar get_pages ...
http://codex.wordpress.org/Function_Reference/get_pages
fuente