Intereting Posts
Есть ли способ переименовать или скрыть wp-login.php? как получить все имя дочерней категории в названии определенной категории? Как сделать сообщения в блоге имеют свои собственные URL-адреса? Экспортировать пользователей и их дополнительные пользовательские поля Выделите пункт меню, когда пользовательский тип сообщения? Передать переменную от функции до короткого кода Правильное использование интернационализации Потерянное форматирование после сохранения Список всех типов сообщений в представлении администратора с использованием /wp-admin/edit.php?post_type= WordPress отключить вкладку «Установить темы» Сравнить post-ID в WP_Query? (Меньше или больше) Как я могу заставить wp-pagenavi работать с настраиваемым запросом, основанным на представлении формы? Предшествующие аргументы при использовании запросов Удалить массовые действия на основе роли пользователя или возможностей Повторить код, изменить переменную?

Динамически ссылаться на последнее сообщение или моделировать запрос определенной должности в шаблоне страницы

Я хочу иметь ссылку в меню WordPress, указывающую на последнее сообщение определенной категории.

Поскольку я не могу разместить динамический URL-адрес в меню wordpress, мой подход заключался в том, чтобы в меню добавить страницу с настраиваемым шаблоном страницы.

Этот шаблон страницы должен вести себя как темы single.php но показывая последний single.php из данной категории.

Есть ли способ включить темы single.php и имитировать запрос определенной записи?

Я попытался скопировать содержимое single.php в шаблон страницы и изменить запрос с помощью

 query_posts( array( 'cat' => 9993, 'showposts' => 1) ); 

Если я сделаю это до the_header() , тогда я не получу сообщений. Если я сделаю это после the_header() , я получу правильный контент, но заголовок темы установит некоторые конкретные классы для стилизации страницы. Поэтому мне нужна the_header() чтобы думать, что запрашиваемая страница была запрошена, а не страница.

Обновление: я не полностью использовал решение toscho, потому что я не получил выделение активного элемента меню и в правильном положении. Но он указал мне в правильном направлении с фильтром wp_nav_menu_objects .

У меня был элемент главного меню CategoryX, который должен открывать непосредственно последнее сообщение из CategoryX , а также открывать подменю со ссылками на старые сообщения и другие связанные вещи. В подменю также должна быть ссылка на последнюю Post ( LatestFromX ), которая также должна быть выделена непосредственно после klicking в CategoryX в главном меню.

То, что я в основном делал, было: Создание фиктивных пунктов меню с помощью брандмауэра WP, а затем замена его URL-фильтрами на функцию фильтра.

 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; } 

Solutions Collecting From Web of "Динамически ссылаться на последнее сообщение или моделировать запрос определенной должности в шаблоне страницы"

Вы можете отфильтровать wp_nav_menu_objects и добавить новый элемент. Вот простой плагин:

 <?php # -*- coding: utf-8 -*- /** * Plugin Name: Latest Post In Menu * Description: Append a link to the latest post to all nav menus called with the argument <code>'add_latest_post' => TRUE</code>. * Plugin URI: http://wordpress.stackexchange.com/q/59892/73 * Version: 2012.07 * Author: Thomas Scholz * Author URI: http://toscho.de * License: MIT * License URI: http://www.opensource.org/licenses/mit-license.php */ add_filter( 'wp_nav_menu_objects', 'wpse_59892_latest_post_in_nav_menu', 10, 2 ); /** * Add a link to the latest post to the nav menu. * * The nav menu has to be called with 'add_latest_post' => TRUE. * Example: * wp_nav_menu( * array( * 'theme_location' => 'primary', * 'add_latest_post' => TRUE * ) * ); * * @wp-hook wp_nav_menu_objects * @param array $sorted_menu_items Existing menu items * @param object $args Nav menu arguments as object. * @return array */ function wpse_59892_latest_post_in_nav_menu( $sorted_menu_items, $args ) { if ( ! isset ( $args->add_latest_post ) // argument set? or ! $args->add_latest_post // argument TRUE? or ! $latest = get_posts( array ( 'numberposts' => 1 ) ) // post found? ) { return $sorted_menu_items; } // Uncomment the following line to see what you can change: // print '<pre>' . htmlspecialchars( var_export( $sorted_menu_items, TRUE ) ) . '</pre>'; $post = $latest[0]; $content = empty ( $post->post_excerpt ) ? $post->post_content : $post->post_excerpt; $link = array ( 'title' => $post->post_title, 'menu_item_parent' => 0, 'ID' => '', 'db_id' => '', 'url' => get_permalink( $post->ID ), 'classes' => array ( 0 => '', 1 => 'menu-item', 2 => 'menu-item-type-post_type', 3 => 'menu-item-object-post', 4 => 'latest-post', ), // strips all tags and reduces the length to 20 words 'attr_title' => wp_trim_words( $content, 20 ), ); $sorted_menu_items[] = (object) $link; return $sorted_menu_items; } 

Если мы напишем новое сообщение …

введите описание изображения здесь

… и вызовите навигационное меню, подобное этому …

 wp_nav_menu( array( 'theme_location' => 'primary', 'add_latest_post' => TRUE ) ); 

… мы получаем …

введите описание изображения здесь

Элемент меню навигации имеет класс latest-post , поэтому мы можем создать его в CSS:

 .menu .latest-post a { color: #eee; background: #9f0; } 

Или используйте этот плагин. Не требуется кодирование wp_nav_menu:

https://de.wordpress.org/plugins/dynamic-latest-post-in-nav-menu/

https://github.com/hijiriworld/dynamic-latest-post-in-nav-menu