Речь пойдёт о новом меню WordPress, кото…

Речь пойдёт о новом меню WordPress, которое реализовано пока в немногих темах (знаю только TwentyTen и её ремикс, кстати, добротная штука).
Вот Я решил воспользоваться прекрасными возможностями этого меню. Зашёл, настроил. Аккуратненько так, цивильно всё. Но, собственно, зачем полез: хотел прекратить кнопку «Блог» в меню, которое содержит список недавних записей. Так и сделал. Но сейчас это реализовано «вручную»: каждый пост добавлял сам. А можно ли сделать так, чтобы они сами туда добавлялись?
Надеюсь, понятно пишу.

Grawl
Оцените автора
Добавить комментарий

  1. tiaurus

    А что это за кнопка Блог? Откуда такая появилась?

    Ответить
    1. Grawl

      Я создал страницу, назвал её «Блог», и указал в настройках, что на главной показывать страницу «Визитка», а записи отображать на странице «Блог».
      Потом создал меню и к странице «Блог» добавил подпункты последних записей. Каждую новую пока что буду добавлять так.

      Ответить
  2. Sergey Biryukov

    Можно добавить фрагмент в functions.php активной темы:

    function add_blog_posts($items) {
    $submenu = '<ul class="sub-menu">' . "n";
    $recent_posts = wp_get_recent_posts();
    foreach ( $recent_posts as $post )
    $submenu .= "t" . sprintf('<li class="menu-item">%s</li>', get_permalink($post['ID']), $post['post_title']) . "n";
    $submenu .= "</ul>n";
    return preg_replace('/(.*?)/', "$1n$submenu", $items);
    }
    add_filter('wp_nav_menu_items', 'add_blog_posts');
    
    Ответить
    1. Grawl

      О, добротно. Только, к сожалению ,сложно пока читать этот код и понимать его строки :) благодарю.

      Ответить
      1. Sergey Biryukov

        Функция wp_get_recent_posts() возвращает массив текущих записей, который с помощью тегов списка оформляется в виде подменю. Затем с помощью preg_replace() находится ссылка на блог, и сразу после неё вставляется созданное подменю. Символы n и t необязательны — я добавил их, чтобы получившийся HTML-код был точно таким же, как и при ручном добавлении.

        Ответить
        1. Grawl

          Ого! Круто. Сразу всё понятно стало.

          Ответить
    2. Grawl

      Так. Я тут воспользовался методом дочерних тем — создал папку «twentyten-child», в не положил style.css и functions.php. В стиль положил все свои правила, что успели накопиться, а в функции — только вот эту штуку для добавления пунктов меню. Дочерняя тема сработала, активировалась, и даже стили применились, а вот функция эта не работает :( что делать?

      Ответить
      1. Grawl

        Так, всё, разобрался:
        — Привязал дочернюю тему не к TwentyTen, а к 2010-weaver
        — Включил заново меню.
        Спасибо огромное!

        Ответить
  3. Grawl

    Ха, этот код выводит ещё и черновики!
    [img]http://dl.dropbox.com/u/666401/Images/Screenshots/2010-10-20_212327.png[/img]

    Ответить
    1. Sergey Biryukov

      Оказалось, что wp_get_recent_posts() возвращает не только опубликованные записи. Можно заменить на get_posts(), учитывая, что теперь $post — объект, а не массив:

      function add_blog_posts($items) {
      $submenu = '<ul class="sub-menu">' . "n";
      $recent_posts = get_posts('numberposts=10');
      foreach ( $recent_posts as $post )
      $submenu .= "t" . sprintf('<li class="menu-item">%s</li>', get_permalink($post->ID), $post->post_title) . "n";
      $submenu .= "</ul>n";
      return preg_replace('/(.*?)/', "$1n$submenu", $items);
      }
      add_filter('wp_nav_menu_items', 'add_blog_posts');
      

      Это прибавляет гибкости, т.к. можно использовать все параметры get_posts() — например, включать/исключать записи определённой рубрики,

      Ответить
      1. Grawl

        ага, теперь хорошо. спасибо.

        Ответить