我正在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; ?>
MENU
因为我正在开发单页布局,所以我应该修改基本的WordPress导航,以输出特定于这种布局类型的右菜单链接。所以正常输出(我删除了
id
和
class
属性)应该替换为标签和页面的slug。
基本菜单链接标记:
<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”的模板的页面应显示在索引中。php作为一个节,但不作为菜单项列表中的菜单项出现,因为这些节与主要内容无关。
我希望我的愿望能得到解决。如果您有任何问题,请在下面的评论中告诉我。现在,请提前感谢。
SO网友:JHoffmann
为了能够更改链接,可以将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 );
我没有运行此代码,我希望它对您有用。