get_template_part和get_footer的单页wordpress问题

时间:2014-08-08 14:15:09

标签: php wordpress

我正在尝试做的是在wordpress中转换我的单页设计,我认为能够在单独的页面中编辑,添加和修改页面的不同部分会很好。单页网站将通过菜单(ID为主)订购。

在我使用get_template_part的wp-codex之后,它应该正常工作,因为它应该:

  

将模板部件加载到模板中(标题,侧边栏,页脚除外)

get_header被跳过,但get_footer被排除,网站呈现错误。


前page.php文件

$pages = wp_get_nav_menu_items('main');
global $post;
foreach ($pages as $post) {
    $post = get_post($post->object_id);
    if($post->post_type != "page") continue;
    setup_postdata( $post );
    $postName = (locate_template('page-' . $post->post_name . '.php') == '') ? null : $post->post_name;
    get_template_part('page', $postName);
}
wp_reset_postdata();

这是一个错误吗?或者我做错了什么?实现这一目标的最佳方法是什么?

4 个答案:

答案 0 :(得分:0)

如果你的get_template_part()不起作用,那么问题可能是在主题中没有名为page.php的文件,检查这个文件。

答案 1 :(得分:0)

对于它的价值,我经常会跳过一些WP助手并更直接地工作,但不是流氓。这是我图书馆的片段:

/** Get core data for a WP post/page using ID
* @param $id : wp post/page ID
* @return array
*/
function wp_get_single_post_basic($id){
    $post = get_post($id, ARRAY_A);
    $ret = array();
    $content = $post['post_content'];
    // FILTER via WP
    $content = apply_filters('the_content', $post['post_content']);
    $ret['title']= $post['post_title'];;
    $ret['content']= $content;
    $ret['link'] = $post['post_name'];
    $ret['edit_link'] = '<a href="'.get_edit_post_link($id).'" title="edit">edit</a>';
    return $ret;
}

该功能以非常容易管理的方式分解内容并生成编辑链接(在调用脚本中为此构建bool)。也格式化内容。

因此,抓取并排序所需的ID,然后在一个页面的ID循环中运行它。然后,所有内容将通过页面/帖子/任何内容(自定义分类法FTW)进行隔离。

如果您已准备好ID并进行了分类以及准备好的html / css,我可以删除此功能并在一小时内完成一页的工作。对于生产线工作而言,这种类型的帮助程序非常棒 - 对于您希望在循环外部某些奇怪位置以某种奇怪方式放置特定帖子/页面的站点也是如此。

如果你有问题/脚本让我知道,几年前我没有使用它,几年前写过...

答案 2 :(得分:0)

我认为您使用全局$post时遇到问题,并在菜单对象的$post循环中存储foreach变量。我想可能是模板部件调用错误的原因。

我建议您删除全局$post声明,reset_postdata以及setup_postdata,因为您没有在循环中使用全局,您是&#39;只是命名它。

您正在从菜单中获取$post对象,因此您似乎不需要在您想要使用&#34;循环时最常使用的全局或其他功能风格&#34;没有post_id的模板标记,例如the_permalink()the_title()

答案 3 :(得分:0)

我最终将默认的page.php模板复制为page-page.php并将其加载如下:

$postName = (locate_template('page-' . $post->post_name . '.php') == '') ? 'page' : $post->post_name;

然后在刚刚加载page.php

page-page.php