$ post-> post_parent在页面上的行为不同,然后在functions.php中

时间:2011-10-28 07:44:57

标签: php wordpress parent breadcrumbs

我创建/修改了一个函数来在WordPress的页面上显示面包屑。修改后的版本使用#post-&gt; post_parent来获取页面的父级,以便拥有完整的痕迹路径(主页&gt;第1页&gt;第2页&gt;第3页主页&gt;第3页)< / p>

代码在页面(ie. home > page 1 > page 2 > page 3)上完美执行。但是当我将它放入一个函数并从functions.php页面调用它时,它无法使用$ post-&gt; post_parent (ie. page 3 vs. home > page 3)检测页面是否有父。

这可能是因为页面代码是在the_loop中执行的,但函数是以某种方式在它之外的吗?

在页面代码:

if (!is_home()) {
            echo "<ul id='breadcrumb'>";
            echo '<li><a href="';
            echo get_option('home');
            echo '">HOME';
            echo "</a></li>";
            if (is_category() || is_single()) {
                the_category('title_li=');
                if (is_single()) {
                    the_title('<li>', '</li>');
                    echo "</ul>";
                }
            } elseif (is_page()) {
                if(!$post->post_parent){
                    //echo "No Parent";
                    }
                else{

                    echo '<li>'.  wp_list_pages('include='.$post->post_parent.'&title_li=' ).'</li>';
                }


                the_title('<li>', '</li>');
                echo "</ul>";
            }
        }

功能代码:

function the_breadcrumb() {
        if (!is_home()) {
            echo "<ul id='breadcrumb'>";
            echo '<li><a href="';
            echo get_option('home');
            echo '">HOME';
            echo "</a></li>";
            if (is_category() || is_single()) {
                the_category('title_li=');
                if (is_single()) {
                    the_title('<li>', '</li>');
                    echo "</ul>";
                }
            } elseif (is_page()) {
                if(!$post->post_parent){
                    //echo "No Parent";
                    }
                else{

                    echo '<li>'.  wp_list_pages('include='.$post->post_parent.'&title_li=' ).'</li>';
                }


                the_title('<li>', '</li>');
                echo "</ul>";
            }
        }
    }

这段代码没有任何本质上的不同,除了它现在包装在一个函数中。它不显示父页面这一事实令人沮丧。我不想在我创建的每个页面模板上都包含此代码。

帮助&amp;建议将不胜感激!

2 个答案:

答案 0 :(得分:2)

$post未在您的函数中定义。尝试将$ post作为参数提供给函数:

function the_breadcrumb($post) {

答案 1 :(得分:1)

或者,定义

global $post;

位于函数顶部。

function fname()
{
   global $post;
   code...
}