第一级和第二级自定义帖子页面的不同模板

时间:2011-06-02 作者:jam

我有一个自定义的帖子类型,例如,产品。它们可以是多层次的,比如页面,f.e。,

Products (custom post type)

    Books
    |- LOTR
    |- Sherlock Holmes
    |- Cooking help
    |- etc

    CD
    |- Iron maiden
    |- AC/DC
    |- Brainstorm
    |- etc

    Manuals
    |- MS Word manual
    |- MS Excel manual
    |- PHP manual
我需要一个层次(书籍,CD,手册)的第一级,我可以通过创建一个文件归档产品实现单独的页面。然后使用参数进行新的查询,以仅获取第一级。

问题在于第二级。我不知道如何创建一个模板文件来显示电子书的子元素?

当然,我可以使用jquery来管理它。获取所有级别的层次结构,然后隐藏第二级,单击第一级名称,打开子级并隐藏第一级,但这不是我需要实现的解决方案,因为缺少正确的url。我想获得1级www.ddd的正确url。com/products/和www.ddd。com/产品/书籍/

您将如何实现这一点?

已更新

这是我的存档POSTTYPE中的内容。php文件。

<?php get_header();?>
            <div id="maincol">
            <?

    $query = new WP_Query( \'post_type=produkts&post_parent=0\' );
    while( $query->have_posts() ) : $query->the_post();
    echo \'<li>\';
    the_title();
    echo \'</li>\';
    endwhile;
    wp_reset_postdata();    

            ?>

                </div>

<?php get_footer();?>
和单个posttype。php

<?php get_header();?>
        <div id="maincol">
            <?php

            if (is_child_post()){
                //this is the true single product
                the_title();

            }else{
                //this is the product list of parent 

                $query = new WP_Query( \'post_type=produkts&post_parent=\'.$post->ID.\'\' );
                while( $query->have_posts() ) : $query->the_post();
                echo \'<li>\';
                the_title();
                echo \'</li>\';
                endwhile;
                wp_reset_postdata();
            }       

            ?>
            </div>
<?php get_footer();?>

1 个回复
SO网友:Bainternet

我需要类似的东西,我想出了一个简单的小函数,使事情变得更简单:

function is_child_post($parent_ID = null) {
    global $post;
    if (isset($parent_ID) && $parent_ID != null){
        return $post->post_parent == $parent_ID;
    }
    return $post->post_parent > 0;
}

Usage:

检查帖子/页面/自定义是否有父项:

if (is_child_post()){
  //yes we have a parent
}else{
  //not its a top level parent
}
检查帖子/页面/自定义是否是ID为32的特定父级的子级:

if (is_child_post(32)){
  //yes its a child of a parent with the ID of 32
}else{
  //not its a child of a parent with the ID of 32
}
所以,一旦你有了这个方便的功能,你就可以创建你的a-child产品了。php模板文件,然后使用“template\\u redirect”挂钩告诉WordPress何时使用它。例如,这将告诉WordPress即使它是子产品也要使用它:

function custom_child_template_redirect($single_template) {
    global $post;
    if ($post->post_type == \'YOUR_TYPE\' && is_child_post()) { //change YOUR_TYPE to your custom Post type name 
        return TEMPLATEPATH . \'/child-products.php\'; // change child-products.php to the name of your child template file
    }
    return $single_template;

}
add_action( \'template_redirect\', \'custom_child_template_redirect\' );

结束