Как заменить URL-адрес страницы для прокрутки страницы в ссылке меню?

Я разрабатываю сайт на одной странице в WordPress, который содержит несколько разделов. Эти разделы являются страницами в WordPress.

В моем index.php я просматриваю все страницы в WordPress и добавляю их в индексный файл – переднюю страницу с настраиваемым циклом.

Прокрутка по всем страницам

 <?php $args = array('post_type' => 'page', 'orderby' => 'menu_order', 'posts_per_page' => -1); $loop = new WP_Query($args); ?> <?php if ($loop) : while ($loop->have_posts()) : $loop->the_post(); ?> <?php $slides = get_field('flexslider'); ?> <?php if ($slides) { get_template_part( 'templates/slideshow' ); } else { get_template_part( 'templates/parallax' ); } ?> <?php endwhile; ?> <?php endif; ?> 

МЕНЮ

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

Разметка основного меню:

 <li id="" class=""><a href="http://prachtelectronica.nl/wordpress/?page_id=10" class="menu-link main-menu-link">Lightning</a></li> 

Измененная ссылка на меню (что я хочу):

 <li id="" class=""><a href="#lightning" class="menu-link main-menu-link">Lightning</a></li> 

Я использую следующую функцию WordPress для создания меню:

 <?php wp_nav_menu( array( 'theme_location' => 'primary-menu', 'menu' => 'primary-menu', 'container' => 'nav', 'container_id' => 'primary-navwrapper', 'menu_id' => 'listnav', )); ?> 

Мне хотелось бы, чтобы положение каждого раздела (страницы) определялось по порядку меню, установленному в « Appearance > Menu , поэтому при создании нового раздела (страницы) у клиента есть всего три вещи. (1) Создайте страницу, (2) добавьте страницу в меню (3) и закажите ее внутри структуры меню.

Я уже использую свойство menu_order внутри цикла моей страницы (как вы можете видеть выше), чтобы отображать страницы внутри файла index.php . Порядок меню используется для размещения разделов (страниц) в правильном порядке.

Один дополнительный параметр для страниц заключается в том, что пользователь может добавить пользовательский шаблон на страницу, выбрав шаблонные ads внутри редактора WP. Страницы, которые используют этот шаблон с именем «ads», должны отображаться в index.php как раздел, но не отображаются в качестве элемента меню в списке пункта меню, потому что эти разделы не относятся к основному контенту.

Я надеюсь, что есть решение по моему желанию. Если у вас есть какие-либо вопросы, пожалуйста, сообщите мне об этом в комментариях ниже. На данный момент, спасибо заранее.

Solutions Collecting From Web of "Как заменить URL-адрес страницы для прокрутки страницы в ссылке меню?"

Чтобы иметь возможность изменить ссылку, вы можете подключиться к фильтру nav_menu_link_attributes .

 if ( ! function_exists( 'wpse_209457_nav_menu_link_attributes' ) ) { function wpse_209457_nav_menu_link_attributes( $atts, $item, $args ) { if ( 'primary-menu' == $args->theme_location ) { // Get the target posts slug $object_data = get_post( $item->object_id ); $atts['href'] = '#'.$object_data->post_name; return $atts; } } } add_filter( 'nav_menu_link_attributes', 'wpse_209457_nav_menu_link_attributes', 10, 3 ); 

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

 if ( ! function_exists( 'wpse_209457_wp_nav_menu_objects' ) ) { function wpse_209457_wp_nav_menu_objects( $sorted_menu_items, $args ) { foreach ( $sorted_menu_items as $key => $item ) { $template = get_post_meta( $item->object_id, '_wp_page_template', true ); if ( "templates/ads.php" == $template ) { unset( $sorted_menu_items[$key] ); } } return $sorted_menu_items; } } add_filter ( 'wp_nav_menu_objects', 'wpse_209457_wp_nav_menu_objects', 10, 2 ); 

Я не запускал этот код, надеюсь, это сработает для вас.