我正在构建一个菜单,并使用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。这绝对是不好的,也是不可取的。
无论内容来自模板、设置页面还是文本编辑器本身,是否有能够检索页面内容的通用解决方案?
提前谢谢。
SO网友:Chip Bennett
您可以通过使用get_page_template_slug()
在你的循环中。例如,可以对非默认页面模板执行以下操作:
if ( \'\' != get_page_template_slug( $page->ID ) ) {
// This page uses a custom page template;
// do something
}
或者,您可以专门查找您的联系人表单页面模板:
if ( \'template-contact-form.php\' == get_page_template_slug( $page->ID ) ) {
// This page uses the contact form custom page template;
// do something
}
您将遇到的问题是“做点什么”部分,因为您已将联系人表单硬编码到模板中。
要执行您想要执行的操作,您可能需要将联系人表单代码转换为短代码或小部件,以便您可以在自定义循环中解析/输出它,例如:
if ( \'template-contact-form.php\' == get_page_template_slug( $page->ID ) ) {
// This page uses the contact form custom page template;
// parse the shortcode
echo do_shortcode( \'[contact-form]\' );
}
。。。或:
if ( \'template-contact-form.php\' == get_page_template_slug( $page->ID ) ) {
// This page uses the contact form custom page template;
// output the widget
the_widget( \'my-contact-form\' );
}
(注:简写代码
do_shortcode()
和
the_widget()
; 有关正确使用方法,请参阅法典。)