it-swarm-ja.com

 第1レベルと第2レベルのカスタム投稿ページ用の異なるテンプレート

私はカスタムの投稿タイプを持っています。それらは、ページのように、マルチレベルにすることができます。

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

私はテーマディレクトリにarchive-products.phpファイルを作成し、それから最初のレベルだけを取得するためのパラメータを持つ新しいクエリを作成することで達成できる階層の最初のレベル(書籍、CD、マニュアル)用に別のページが必要です。

問題は2番目のレベルにあります。 f.eの子要素を表示するためのテンプレートファイルの作成方法がわかりません。本は?

もちろん、私はjqueryを使ってそれを管理することができます。すべての階層レベルを取得してから、2番目のレベルを非表示にし、最初のレベルの名前をクリックしてサブレベルを開き、1番目のレベルを非表示にします。私は1レベルのwww.ddd.com/products/そしてまた2番目のwww.ddd.com/products/books/の正しいURLを取得したいです。

どのようにしてこれを達成しますか?

更新しました

これが私のarchive-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();?>

そしてsingle-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
jam

私は似たようなものを必要としていました、そして、私は物事をより簡単にするこの単純な小さい機能を思い付きました:

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;
}

使用法:

投稿/ページ/カスタムに親があるかどうかを確認します。

if (is_child_post()){
  //yes we have a parent
}else{
  //not its a top level parent
}

post/page/customが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
}

そのため、この便利な機能を手に入れたら、child-products.phpテンプレートファイルを作成してから 'template_redirect'フックを使用して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' );
5
Bainternet