$ post-> post_parent ведет себя иначе на странице, чем в functions.php - PullRequest
3 голосов
/ 28 октября 2011

Я создал / изменил функцию отображения хлебных крошек на страницах WordPress.Модифицированная версия использует # post-> post_parent, чтобы получить родителя страницы, чтобы иметь полный след (домашняя страница> страница 1> страница 2> страница 3 против домашней страницы> страница 3)

Код отлично выполняется на странице (ie. home > page 1 > page 2 > page 3).Но когда я помещаю его в функцию и вызываю ее из страницы functions.php, он не может определить, есть ли у страницы родительский элемент, используя $ post-> 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>";
            }
        }
    }

В этом нет ничего особенногоэтот код за исключением того, что теперь он обернут в функцию.Тот факт, что он не отображает родительские страницы, разочаровывает.Я не хочу включать этот код в каждый созданный мной шаблон страницы.

Помощь и предложения будут с благодарностью приняты!

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

$post не определено в вашей функции. Попробуйте указать $ post в качестве параметра функции:

function the_breadcrumb($post) {
1 голос
/ 30 сентября 2015

Или определите

global $post;

в верхней части функции.

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