IF(选中类别/标签)THEN(显示Header2php)

时间:2015-12-21 作者:Justin Munce

我有3个标题(header.php、header2.php和header3.php)。我希望始终显示标题。php位于顶部。标题下方。php,我希望根据帖子的类别显示第二个标题。如果职位是灰熊队,我要2号队长。如果职位是和平管道,我要3号主管。

我理解显示2个标题时使用:

<?php
get_header(); 
get_header(header2); 
?>
但是,如何使第二个标题取决于是否标记了类别(或添加了标记,以完成此问题)?

EDIT: <由于jgraup和karpstrucking的帮助,我发现这个问题还不完整:

正在使用。。。

if ( has_category( \'Grizzly Bears\' ) ) {
  get_header( \'header2\' );
} else if ( has_category( \'Peace Pipes\' ) ) {
  get_header( \'header3\' );
}
。。。仅当has\\u类别是most子类别时有效。我想将该条件应用于父most类别。此代码对此失败。例如,我检查了父类别“灰熊”和子类别“灰熊钓鱼”,我不能使用“灰熊”的代码。

谢谢,吉咪

3 个回复
SO网友:karpstrucking

您可以使用has_category() 此功能:

if ( has_category( \'Grizzly Bears\' ) ) {
  get_header( \'header2\' );
} else if ( has_category( \'Peace Pipes\' ) ) {
  get_header( \'header3\' );
}
您可以添加has_tag 功能也一样。如果要同时检查倍数,则两者都接受术语ID、名称或slug的数组。

编辑:已更改in_categoryhas_category 为了保持一致性和未来可能的弃用

SO网友:Pieter Goosen

在这种情况下,我想做的就是显示一个标题(header)2-如果一篇文章选中了某个类别,则编辑评论。我可能只有“灰熊”,或者可能同时有“灰熊”和它的孩子“灰熊钓鱼”,或者我可能有另一个孩子“灰熊吃东西”,但只要“灰熊”类别被选中,我希望-THEN-语句发生。

我们仍然可以使用在ORIGINAL ANSWER, 但我们会用不同的方式。我们需要得到帖子所属的类别,然后检查灰熊是否在其中

$parent_cat  = 1, //Pass the ID, this will ID for \'Grizzly bears\'    
$descendants = get_term_descendants( $parent_cat );
$post_terms  = get_the_category( get_the_ID() );
$ids         = wp_list_pluck( $post_terms, \'term_id\' );
if ( $decendants && !in_array( $parent_cat, $ids ) ) {
    if ( has_category( $decendants ) ) {
        // Post belongs to parent cat descendants but not parent cat
    }
} elseif ( in_array( $parent_cat, $ids ) ) {
    // Post belongs to the parent category
} else {
    // Post does not belong to parent cat or any of its decendants
}
原始答案你的问题有点难理解,但我会回答我的阅读方式。

如果需要将某个标头应用于顶级术语及其所有子体,可以使用get_terms() 返回给定顶级父级的所有子级

代码前的几个注释:

代码未经测试,可能有缺陷。请确保首先在启用调试的情况下在本地测试此功能

该代码至少需要PHP 5.4

  • 它可能非常冗长,因为我们需要做大量工作才能从顶级术语中获得所有后代。注意,我已经对此进行了解释,但为了提高性能,请确保将ID而不是slug传递给函数,并且不要使用名称

    代码

  • function get_term_descendants( $term = \'\', $taxonomy = \'category\' )
    {
        // First make sure we have a term set, if not, return false
        if ( !$term )
            return false;
    
        // Validate and sanitize taxonomy
        if ( \'category\' !== $taxonomy ) {
            $taxonomy = filter_var( $taxonomy, FILTER_SANITIZE_STRING );
            // Make sure the taxonomy is valid
            if ( !taxonomy_exists( $taxonomy ) )
                return false;
            // Make sure our taxonomy is hierarchical
            if ( !is_taxonomy_hierarchical( $taxonomy ) )
                return false;
        }
    
        // OK, we have a term and the taxonomy is valid, now we need to validate and sanitize the term
        if ( is_numeric( $term ) ) {
            $term = filter_var( $term, FILTER_VAILDATE_INT );
        } else {
            $term_filtered = filter_var( $term, FILTER_SANITIZE_STRING );
            $term_object   = get_term_by( \'slug\', $term_filtered, $taxonomy );
            $term          = filter_var( $term_object->term_id, FILTER_VAILDATE_INT );
        }
    
        // Everything is sanitized and validated, lets get the term descendants ids
        $term_descendants = get_terms( $taxonomy, [\'child_of\' => $term, \'fields\' => \'ids\'] );
    
        // Check if we have terms
        if ( !$term_descendants )
            return false;
    
        // We have made it, return the descendants
        return $descendants;
    }
    
    我们的职能get_term_descendants() 现在将保留传递给函数的项的子项ID数组,或者如果传递的项没有子项,则返回false

    我们现在可以使用我们的函数并将返回的ID数组直接传递给has_category()

    NOTE: 您可以将父项ID或slug传递给函数。不要使用名称,因为层次结构术语在不同层次结构中可能有重复的名称。还要注意的是,将slug传递给函数的代价有点高,因为我们将使用get_term_by() 从slug中获取术语ID。为了提高性能,请尝试始终传递ID

    $parent_cat = 1, //Pass the ID, can pass the slug, but reread the note above
    $descendants = get_term_descendants( $parent_cat );
    if ( $decendants ) {
        $term_array = array_merge( $parent_cat, $descendants );
    } else {
        $term_array = $parent_cat;
    }
    // Now we can check if the post belongs to the parent cat or one of his descendants
    if ( has_category( $term_array, $post ) ) {
        // Post belongs to parent cat or one of his descendants
    } else {
        // Post does not belong to the parent or any of his descendants
    }
    

    SO网友:jgraup

    对于所有人categories (wp_get_post_categories)

    函数wp\\u get\\u post\\u categories()用于检索帖子的类别列表。

    get_header(\'header\');
    
    有条件的基于has_category

    检查当前帖子是否有任何给定类别。将根据帖子的类别的term\\u id、name和slug检查给定的类别。以整数形式给出的类别将仅根据帖子的类别的term\\u ID进行检查。

    if(has_category(\'bears\', $post)) {
        get_header(\'header2\');
    }
    else if(has_category(\'pipes\', $post)) {
        get_header(\'header3\');
    }
    

    相关推荐