问题:正在检索父类别的第一篇帖子

时间:2012-07-04 作者:Hal Birk

我在检查一篇文章的类别是否有父类别时遇到问题,如果有,检索该类别的第一篇文章时也会遇到问题。在the\\u post部件内部:

这是我的代码:

    foreach((get_the_category()) as $childcat) {
            $parentcat = $childcat->category_parent;
            $parentcat_name = get_cat_name($parentcat);
    }

    echo "ID of parent category: ".$childcat->category_parent."<br />";
    if ($parentcat) {   // is there a parent? If so, this is a child post:

    $tmp_post = $post;  // assign orginal post to tmp_post variable for later use 

    //link name of parent category to first post in parent category
    global $post;
    $the_slug = \'my_slug\';
    $args = array( 
        \'category\' => $parentcat, 
        \'numberposts\' => 1, 
        \'order\' => \'ASC\' 
        ); 
    $my_posts = get_posts($args);
    if( $my_posts ) {
    $parentpost_link = $my_posts[0]->guid;
    }
        ?>  
        <h2 class=\'cat-parent\'><a href="<?php echo $parentpost_link ?>"><?php echo $parentcat_name; ?></a></h2> 
奇怪的是,这适用于一个或两个类别。而在另一个场合,当在子类别帖子中时,它找不到parentcategory。

识别parentcategory的第一个childcategory也有类似的问题,但我想原因与我在这方面的问题类似。

我想要的是:

获取子类别的ID,当前帖子所属的子类别或此帖子的唯一子类别。然后,我制作一个包含该类别中所有帖子的幻灯片,如果当前帖子是子类别,我需要该类别的ID。这些帖子最多不应该属于两个类别:如果第一个发现的是错误的,我会继续查找下一个,应该是正确的

2 个回复
SO网友:Stephen Harris

问题出在逻辑上。一篇文章可能有几个术语,但并非所有术语都是子术语。例如,考虑parent > child 术语关系:

a > b > c
d > e
f
让我们假设我们的帖子有条款c,ef 附属于他们。

现在通过以下循环c,ef 反过来但是$parentcat (和$parentcat_nam) 每次都会超出值:

 foreach((get_the_category()) as $childcat) {
            $parentcat = $childcat->category_parent;
            $parentcat_name = get_cat_name($parentcat);
    }
所以$parentcat 将设置为中最后一个术语的父项的IDget_the_category(). 如果是的话c 它的ID是b. 但如果是的话f, 它将为0,因此“无法找到父类别”。

现在还不清楚在与父母多个学期的情况下你想做什么。如果你只想要一个父母,那么你可以break 超出foreach

 foreach((get_the_category()) as $childcat) {
            if( !empty($childcat->category_parent) ){
                $parentcat = $childcat->category_parent;
                $parentcat_name = get_cat_name($parentcat);
                break;
            }
    }
    //$parentcat is set the ID of the parent of one of the terms, 0 if all terms have no parent.
如果要存储帖子术语的所有父项的ID,可以将它们存储在一个数组中

 $parentcat_arr=array();
 foreach((get_the_category()) as $childcat) {
            if( !empty($childcat->category_parent) ){
                $parentcat_arr[] = $childcat->category_parent;
                break;
            }
    }
  //$parentcat_arr stores array of IDs corresponding to the parents of the post\'s terms
  //If its empty, then the post has no terms with parents.

SO网友:hariom batra

这是一段非常简单的代码,用于显示帖子的所有父类别(包括当前类别):

$category = get_the_category();
$current_category = $category[0];
echo get_category_parents($current_category, TRUE, \' &raquo; \');

结束

相关推荐

将筛选器添加到wp_Dropdown_Pages()或wp_Dropdown_Categories()-没有选择容器?

我在和wp_dropdown_pages() 和wp_dropdown_categories() 并且两者都始终输出<select>-盒子及其<option>s作为项目。有没有可能在这个函数中添加一个过滤器/挂钩,这样我就可以得到<option>s而不被包裹在<select>我这样问的原因是我想将页面和类别合并到一个下拉列表中。我找不到参数来设置这个!有什么想法吗?