0

我的设置如下:
- 称为“客户”的自定义帖子类型
- 2 级导航(单独的,第二级仅显示当前页面是否有父/子)
- 称为客户的页面
- 客户帖子具有自定义模板(单-客户端.php)

我想让任何“客户”发布客户页面的子页面/子页面,以便导航在客户页面上正确显示(它会自动列出子页面)并且很容易添加新客户。

我找到了几个脚本,但没有一个完全符合我的要求。

这是我的子导航代码的主要部分:

<nav id='content_clients_navig' class='navig_general'>
    <ul>
        <?php
            global $post;

            //determine which navig should be displayed
            //if post has parent, display parent navig
            //else display the current post's navig
            $navig_display = ($post->post_parent) ? $post->post_parent : $post->ID;

            $menu_args = array(
                'child_of' => $navig_display,
                'title_li' => ''
            );
            wp_list_pages( $menu_args );
        ?>
    </ul>
</nav>

我通过在我的模板文件中插入这段代码来调用它:

<?php if (has_subnavig()) get_template_part( 'part', 'subnavig' ); ?>

这是 has_subnavig:

function has_subnavig()
    {
        global $post;
        if( is_page() && $post->post_parent){
            return true;
        }else{
          $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
        };
        if($children){
          return true;
        }else{
          return false;
        };
    }
4

1 回答 1

0

首先,您必须更改has_subnavig为以下内容,以便在查看父级或客户端帖子时也显示子导航:

function has_subnavig()
{
    global $post;

    if ( is_page() && $post->post_parent ) {
        // post is child post
        return true;
    } else if ( $post->post_type == 'clients' || $post->post_name == 'clients' ) {
        // post is clients parent or clients post type
        return true;
    } else {
        // determine if post has children
        $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");

        if ( $children ) {
            return true;
        } else {
            return false;
        };
    };
}

其次,重要的是要知道子导航应该是客户列表还是标准子页面列表。这就是为什么我们要问,如果 thepost_type或 thepost_nameclients。我的子导航代码的主要部分可能是这样的:

global $post;

// determine which navig should be displayed
if ( $post->post_type == 'clients' || $post->post_name == 'clients' ) {
    // display clients navig if page is clients parent
    // or post_type is clients

    $menu_args = array(
        'child_of' => 0,
        'post_type' => 'clients',
        'post_status' => 'publish' 
    );
} else {
    // if post has parent, display parent navig
    // else display the current post's navig
    $navig_display = ($post->post_parent) ? $post->post_parent : $post->ID;

    $menu_args = array(
        'child_of' => $navig_display,
        'title_li' => ''
    );
}

wp_list_pages( $menu_args );
于 2012-09-03T14:26:21.777 回答