Quiero tener un enlace en el menú de WordPress que apunte a la última publicación de una categoría específica.
Como no puedo poner una URL dinámica en el menú de wordpress, mi enfoque fue colocar una página con una plantilla de página personalizada en el menú.
Esta plantilla de página debe comportarse como los temas single.php
pero mostrando la última publicación de la categoría dada.
¿Hay alguna forma de incluir los temas single.php
y simular una solicitud de una publicación específica?
Intenté copiar el contenido de single.php
en una plantilla de página y modificar la consulta con
query_posts( array( 'cat' => 9993, 'showposts' => 1) );
Si hago eso antes de the_header()
, no obtendré ninguna publicación. Si lo hago después de the_header()
, obtengo el contenido correcto, pero el encabezado del tema establecerá algunas clases específicas para el estilo de una página. Así que necesito la función the_header()
para pensar que se solicitó la publicación deseada y no la página.
Actualización:
No utilicé completamente la solución por toscho porque no pude resaltar la entrada del menú activo y en la posición correcta con eso. Pero me señaló en la dirección correcta con el filtro wp_nav_menu_objects
.
Tenía un elemento del menú principal CategoryX que debería abrir directamente la última publicación de CategoryX , y también abrir un submenú con enlaces a publicaciones más antiguas y otras relacionadas cosas. El submenú también debe tener un enlace a la última publicación ( LatestFromX ), que también debe resaltarse directamente después de hacer clic en CategoryX en el menú principal.
Lo que básicamente hice fue: crear elementos de menú ficticios con el backend de administración de WP y luego reemplazar su URL con la función de filtro.
function wp_menu_add_last_from_category_x( $sorted_menu_items, $args ) {
global $wp;
// get url of latest article in CategoryX (CategoryX has id 9993):
$latest = get_posts( array( 'numberposts' => 1, 'category' => 9993 ) );
$latest_url = get_permalink($latest[0]->ID);
// search for the dummy menu items and replace the url:
foreach ($sorted_menu_items as $key => $item) {
if ($item->title === 'CategoryX' || $item->title === 'LatestFromX') {
$sorted_menu_items[$key]->url = $latest_url;
if ($wp->request == $latest[0]->post_name) {
$sorted_menu_items[$key]->classes[] = "current-menu-item";
}
}
}
return $sorted_menu_items;
}