【问题标题】:Get current category ID of the active page获取活动页面的当前类别 ID
【发布时间】:2012-02-08 10:05:31
【问题描述】:

希望在 WordPress 中提取特定页面的类别 ID,该页面列出使用该特定类别的所有帖子。尝试了以下但不工作。我可以使用single_term_title 获取类别名称。

$category = single_term_title("", false);
$catid = get_cat_ID( $category );

$category 例如显示“娱乐”。但我还需要“娱乐”的ID。我该怎么办?

【问题讨论】:

  • 是普通分类页面还是自定义页面模板?
  • 这是一个自定义分类法 - 尝试在名为 taxonomy-event-categories-entertainment.php 的文件上使用它

标签: php wordpress wordpress-theming categories


【解决方案1】:

如果是分类页面,可以通过以下方式获取当前分类的id:

$category = get_category( get_query_var( 'cat' ) );
$cat_id = $category->cat_ID;

如果您想在任何页面上获取任何特定类别的类别 ID,请尝试使用:

$category_id = get_cat_ID('Category Name');

【讨论】:

  • 正是我想要的。如果您要创建通用类别模板,则比上面的答案更好,因为您只获得页面将显示的类别,而不是上面的多类别数组。
  • 它非常适合我。我在获取 ID 时遇到了问题,并且对我来说工作得很好。节省时间:)
  • 需要替换正确答案!标记为正确的答案误导了我。
  • 这个答案有一些不必要的代码。第一行代码通过使用一个参数 - CATEGORY ID 获取 get_category 函数中的完整类别数据(因为这是 get_query_var('cat') 返回的内容)。第二行代码实际上是从数据中检索 id。这意味着这里完全没有使用 get_category 函数,如果有人只想要 id,那么应该使用 get_query_var('cat')!
  • 谢谢,这对我也有帮助!
【解决方案2】:

你可以试试get_the_category():

$categories = get_the_category();
$category_id = $categories[0]->cat_ID;

【讨论】:

  • $category[0]->cat_ID 是准确的。
  • 这个方法实际上是检查页面上第一个帖子的第一个类别。如果没有帖子或者第一个帖子有多个类别,这将失败或返回错误信息。
  • 我同意@JordanEldredge,这将返回不正确的信息。
  • 这将返回页面第一个帖子的第一个类别。
  • 如果查看的页面是子类,也会失败。检查$categories 数组的输出。
【解决方案3】:

您可以使用的最古老但最快的方法是:

$cat_id = get_query_var('cat');

【讨论】:

  • 这看起来很完美。 Ram Mehar Deswal 的回答是否有缺点?
  • 这实际上是可行的解决方案,它将显示查看页面的类别。
  • @dewd 在 Ram Mehar Deswal 的回答中查找 Bartosz Górski 的评论。他是完全正确的,这里的答案可以满足您的所有需求。
  • @honk31 感谢您向我指出你是个好公民! :)
  • get_query_var( 'cat' ) 对我来说是假的
【解决方案4】:

我使用 get_queried_object 函数来获取 category.php 模板页面上的当前类别。

$current_category = get_queried_object();

Jordan Eldredge 是对的,get_the_category 不适合这里。

【讨论】:

  • 不错,以前没见过这个。
  • 如果结果不是预期的,调用wp_reset_query();恢复默认的WP_Query实例。
  • 这实际上是我发现的最有用的 Wordpress 功能。它无处不在:页面、文章、类别等。
【解决方案5】:

我认为上面的一些方法可能有效,但使用 get_the_category 函数似乎很棘手,并且可能会产生意想不到的结果。

我认为在分类页面中获取猫 ID 最直接、最简单的方法是:

$wp_query->query_vars['cat']

干杯

【讨论】:

  • 完美!谢谢。
【解决方案6】:

如果您需要类别 ID,您可以通过 get_query_var 获得它,它能够检索所有可公开查询的变量。

$category_id = get_query_var('cat');

这是获取类别名称的示例

$category_name = get_query_var('category_name');

当然还有全能的get_queried_object

$queried_object = get_queried_object();

返回完整的分类术语对象(在分类存档页面上使用时..)

【讨论】:

    【解决方案7】:

    我在寻找您所问的内容时发现了这个问题。不幸的是,您接受了一个错误的答案。为了其他试图实现我们想要实现的目标的人,我想我会发布正确的答案。

    $cur_cat = get_cat_ID( single_cat_title("",false) );
    

    正如您所说single_term_title("", false); 正确返回了类别标题,我不确定您的代码为什么会遇到问题;但上面的代码对我来说完美无缺。

    【讨论】:

      【解决方案8】:

      我将它用于类别模板页面中的面包屑:

      $cat_obj = $wp_query->get_queried_object();
      $thiscat_id = $cat_obj->term_id;
      $thiscat = get_category($thiscat_id);
      $parentcat = get_category($thiscat->parent);
      

      【讨论】:

        【解决方案9】:

        另类 -

         $catID = the_category_ID($echo=false);
        

        编辑:以上功能已弃用,请使用get_the_category()

        【讨论】:

        • 仅供参考:此功能已被弃用。
        【解决方案10】:
        $cats = wp_get_post_terms( $post->ID, 'product_cat' );
        foreach($cats as $cat){
        /*check for category having parent or not except category id=1 which is wordpress default category (Uncategorized)*/
          if($cat->parent != '0' && $cat->term_id != 1){
            echo '<h2 class="link"><a href="'.get_category_link($cat->term_id ).'">'.$cat->name.'</a></h2>';
            break;
          }
        }
        

        【讨论】:

          【解决方案11】:

          在上面尝试了寻找帖子的猫 ID 的解决方案,但没有任何效果,改用以下方法:

          $obj = get_queried_object();
          $c_id = wp_get_post_categories($obj->ID);
          

          【讨论】:

            【解决方案12】:

            这是一种获取类别元数据的有效方法,如果您想在前端打印出来,还有 HTML:

                <?php
                
                function custom_get_categories() {
                  $categories = get_the_category();
                  $uncategorised_id = get_cat_ID('Uncategorized');
                  $custom_category_link = '';
                
                  foreach ($categories as $category) {
                    if($category->category_parent == $uncategorised_id || $category->cat_ID == $uncategorised_id) {
                      continue;
                    }
                    
                    $custom_category_link = get_category_link($category->cat_ID); ?>
                
                    <a href ="<?php echo $custom_category_link ?>"> 
                <?php echo "\n\nCategory ID: " . $category->cat_ID . "\nCategory Name" . $category->name;  ?> </a>
                
                    <?php
                  }``
                }
                
                 ?>
            

            【讨论】:

            • 你好 Hemant Adhikari。请将您帖子中的文字与代码分开。
            • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
            【解决方案13】:

            我测试了所有这些答案,这是唯一适用于所有存档页面类型(包括帖子页面)的答案。

            $category_id = get_the_category( get_the_ID());
            $cat_id      = get_category($category_id[0]->term_id);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-05-05
              • 2016-02-23
              • 2011-04-19
              • 2020-06-24
              • 1970-01-01
              • 2011-07-27
              • 1970-01-01
              • 2013-03-14
              相关资源
              最近更新 更多