我正在构建一个菜单,并使用foundation前端框架以手风琴风格将其显示到前端。Wordpress管理员像往常一样从外观->菜单将菜单项(页面、帖子、自定义帖子、类别等)拖放到菜单中。我的代码循环遍历菜单中的每个菜单项,并显示它及其内容。例如,如果循环遇到about page 在菜单中,显示About 作为列表项标签(可单击)及其下的内容(隐藏)。网站访问者点击“关于”以手风琴的方式显示“关于”页面的内容。实现这一目标的最佳方法是什么?我指的是循环和内容检索。我尝试了以下代码。
About about page content (text/ starts as hidden) Contact contact page content (text/ starts as hidden) Solutions HEALTHCARE (label) Healthcare solution 1 (link) Healthcare solution 2 (link) PROFESSIONAL SERVICES (label) Prof service 1 (link) prof service 2 (link)我编写了以下代码,部分成功:
<?php
$menu_name = \'primary\';
if( ($locations = get_nav_menu_locations()) && isset($locations[$menu_name]) ) {
$menu = wp_get_nav_menu_object( $locations[$menu_name] );
$menu_items = wp_get_nav_menu_items($menu->term_id);
?>
<dl class="accordion" data-accordion>
<?php foreach( (array) $menu_items as $key => $menu_item ) { ?>
<?php if ($menu_item->object == \'page\'): ?>
<?php
$id = get_post_meta($menu_item->ID, \'_menu_item_object_id\', true);
$page = get_page($id);
//$template_name = get_post_meta($id, \'_wp_page_template\', true);?>
<dd>
<a href="#panel<?php echo $menu_item->ID;?>"><?php echo $menu_item->title; ?></a>
<div id="panel<?php echo $menu_item->ID;?>" class="content">
<?php
if($page->post_title == \'Contact\'): /* DIRTY:PROBLEM IS HERE */
get_template_part(\'contact\'); /* NOT GOOD, very had coded */
else: echo apply_filters(\'the_content\', $page->post_content); endif; /* I LIKE THIS MORE */?>
</div>
</dd>
<?php elseif($menu_item->object == \'solutions_category\'): /* CUSTOM POST TYPE */?>
<?php /* REST OF THE CODE ... */ ?>
<?php endif;?>
<?php } ?>
</dl> <!-- .accordion -->
这样可以很好地工作,但问题在于“联系人”页面,因为它只对其内容使用模板页面(页面文本编辑器为空)。如您所见,为了使用get\\u template\\u part,我正在显式检查post\\u title是否为Content。这绝对是不好的,也是不可取的。无论内容来自模板、设置页面还是文本编辑器本身,是否有能够检索页面内容的通用解决方案?
提前谢谢。