检测第一级、第二级还是第三级自定义页面?

时间:2016-05-25 作者:RiddleMeThis

我有一个自定义的分级帖子类型。我有3个级别的页面,我需要一种方法来检测我是在顶级、第二级还是第三级。我对此进行了研究,只能找到使用is\\u page()的示例,但显然这不适用于CPT。

function nldf_gallery() {
    $labels = array(
        \'name\'               => \'NLDF\',
        \'singular_name\'      => \'NLDF\',
        \'add_new\'            => \'Add New\',
        \'add_new_item\'       => \'Add New NLDF\',
        \'edit_item\'          => \'Edit NLDF\',
        \'new_item\'           => \'New NLDF\',
        \'all_items\'          => \'All NLDF\',
        \'view_item\'          => \'View NLDF\',
        \'search_items\'       => \'Search NLDF\',
        \'not_found\'          => \'No NLDF found\',
        \'not_found_in_trash\' => \'No NLDF found in Trash\',
        \'menu_name\'          => \'NLDF\'
    );

    $args = array(
        \'labels\'             => $labels,
        \'public\'             => true,
        \'hierarchical\'       => true,
        \'has_archive\'        => false,
        \'menu_position\'      => 4,
        \'menu_icon\'          => \'dashicons-format-gallery\',
        \'supports\'           => array(\'title\',\'editor\',\'comments\',\'revisions\',\'page-attributes\')
    );

    register_post_type(\'nldf\', $args);

}
add_action(\'init\', \'nldf_gallery\');
OR - 为每个级别的页面使用不同模板的方法

1 个回复
最合适的回答,由SO网友:Andy Macaulay-Brook 整理而成

你可以打电话https://codex.wordpress.org/Function_Reference/get_ancestors 在模板中。它将向您当前的帖子返回一个祖先数组,您可以使用数组的长度来查看您在层次结构中的深度。

在模板文件的顶部使用它来设置变量$post\\u depth,并使用它来调整目标CSS的body\\u类或有条件地包含模板部分。

像这样的方法会奏效:

<?php

// single-nldf.php
// Template for displaying single NLDFs

$level = count( get_ancestors( get_queried_object_id(), \'nldf\' ) );

add_filter(\'body_class\',\'nldf_page_class_names\');
function nldf_page_class_names($classes) {
    // add \'class-name\' to the $classes array
    $classes[] = \'single-nldf-\' . $level;
    // return the $classes array
    return $classes;
}

get_header( \'nldf-\' . $level );
// loads header-nldf-0.php, header-nldf-1.php or header-nldf-2.php

get_template_part( \'loop\', \'nldf-\' . $level );
// loads loop-nldf-0.php, loop-nldf-1.php or loop-nldf-2.php

get_footer( \'nldf-\' . $level );
// loads footer-nldf-0.php, footer-nldf-1.php or footer-nldf-2.php
为了保证健壮性,您可能希望检查嵌套在更深层次的帖子,并采取适当的措施。

相关推荐

rewrite rules hierarchical

我希望我的WordPress遵循以下规则:/productes/ 包含所有产品的页面/productes/[category]/ 包含该类别所有产品的分类页面/productes/[category]/[subcategory]/ 包含该类别所有产品(与2相同)的分类页面/[productes]/[category]/[product]/ A.single-productes.php 将显示类别产品/[productes]/[category]/[subcategory]/[product]/ A.sin