Поддержка Проблемы и решения Фильтр add_filter срабатывает только один раз

  • Приветствую всех есть проблема в заголовке имеется вывод главного меню два раза. Первое видно сразу, второе появляется при прокрутке вверх, если перед этим пользователь далеко пролистал вниз. Второе изначально не видно, но выводятся сразу два. Вот кусок кода:

    <?php wp_nav_menu( array(
       'theme_location' => 'main-menu',
       'container' => 'div',
       'container_class' => 'main-menu',
       'container_id' => 'nav-wrapper'
     ) ); ?>
    <?php wp_nav_menu( array(
       'theme_location' => 'main-menu',
       'container' => 'div',
       'container_class' => 'main-menu',
       'container_id' => 'nav-wrapper-appear'
    ) ); ?>

    и есть фильтр

    function addNewItemMenuifNewMonth($items, $args) {
    
    $arch = wp_get_archives( array( 'type' => 'monthly', format'=>'html', 'echo' => false ) );
    
    	global $wpdb, $month;
    
    	$years =  $wpdb->get_col("SELECT DISTINCT DATE_FORMAT(post_date_gmt, '%Y')
    	FROM $wpdb->posts
    	WHERE post_type = 'post' AND post_status = 'publish'");
    
    	if ( $years && count($years) > 0 ) {
    		foreach ( $years as $y ) {
    			$arch = str_replace($y, "", $arch);
    		}
    	}
    	$time_menu = '<li id="menu-item-50" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-50"><a>Время</a><ul class="sub-menu">' . $arch . '</ul></li>'; 
    
    	return str_replace('<li id="menu-item-50" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-50"><a>Время</a></li>', $time_menu, $items);
    }
    
    add_filter('wp_nav_menu', 'addNewItemMenuifNewMonth', 1, 2);

    На первое меню этот фильтр срабатывает, на второе же нет.. В чем проблема?

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Фильтр срабатывает оба раза, просто во втором меню вместо menu-item-50 уже другой ID (по стандартам HTML на странице не должно быть нескольких элементов с одинаковыми ID), поэтому замена не выполняется.

    Попробуйте упростить строки с заменой:

    $time_menu = '<a>Время</a><ul class="sub-menu">' . $arch . '</ul>'; 
    
    return str_replace('<a>Время</a>', $time_menu, $items);

    Сработало, огромное спасибо!

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «Фильтр add_filter срабатывает только один раз» закрыта для новых ответов.