是否有类似于 get_queried_object() 的函数,它只获取当前存档分类术语但忽略 url 查询参数?

Posted

技术标签:

【中文标题】是否有类似于 get_queried_object() 的函数,它只获取当前存档分类术语但忽略 url 查询参数?【英文标题】:Is there a function similar to get_queried_object() that only gets the current archive taxonomy term but IGNORES url query parameters? 【发布时间】:2020-10-14 09:21:52 【问题描述】:

目前我有一个使用自定义 php 存档模板的分类页面。我正在使用 ACF 字段,需要使用 get_queried_object() 来获取当前的分类术语/ID,以便我可以使用与分类相关的自定义字段。

我的问题是我还在页面上设置了一个使用一些 url 查询参数的搜索。当我使用查询参数时,它会干扰 get_queried_object(),并采用第一个 url 查询参数值。所以我的 get_queried_object() 正在查询 url 参数,而不是它所在的分类的存档页面。

我不想把我的整个代码放在这里,因为很多是不相关的,所以我只放一小部分。

<?php
$taxterm = get_queried_object();
$background_image = get_field('background_banner_image', $taxterm);
?>

<div class="page-header page-header_align_center" style="background-image:url(<?php echo $background_image['url'];  ?>)">
  <h2><?php the_field('heading', $taxterm); ?></h2>
  <?php the_field('intro_text', $taxterm); ?>
</div>

我可能忽略了一些显而易见的事情,但是是否有不同的 WP 函数可以获取当前档案的分类术语/ID?

编辑: 我的 var_dump($taxterm) 结果没有 url 参数:

  public 'term_id' => int 50
  public 'name' => string 'All Home Designs' (length=16)
  public 'slug' => string 'all' (length=3)
  public 'term_group' => int 0
  public 'term_taxonomy_id' => int 50
  public 'taxonomy' => string 'level-type' (length=10)
  public 'description' => string '' (length=0)
  public 'parent' => int 0
  public 'count' => int 2
  public 'filter' => string 'raw' (length=3)

带有 ?series=classic 的 url 参数

  public 'term_id' => int 51
  public 'name' => string 'Classic Series' (length=14)
  public 'slug' => string 'classic' (length=7)
  public 'term_group' => int 0
  public 'term_taxonomy_id' => int 51
  public 'taxonomy' => string 'series' (length=6)
  public 'description' => string '' (length=0)
  public 'parent' => int 0
  public 'count' => int 1
  public 'filter' => string 'raw' (length=3)

【问题讨论】:

您能否举例说明var_dump($taxterm) 使用和不使用查询参数时返回的内容?因为据我了解,那里不应该有任何问题 @Stender 我已经编辑了我的问题以包含 var_dump($taxterm) 返回的内容 【参考方案1】:

当您在术语存档页面上时,查询对象应代表术语对象。如果没有 - 可能你做错了什么。

如果您在搜索表单中使用 ?s 参数,只需更改它,因为它被 wordpress 保留并识别为搜索。

无论如何,您可以检查全局查询,而不是使用get_queried_objectget_queried_object_id,应该有您要查找的内容

global $wp_query;
var_dump($wp_query->query_vars);

【讨论】:

嘿,我将以上内容添加到我的代码中,我遇到了与以前相同的问题......我已经编辑了我的问题以包括从 var_dump($taxterm) 返回的内容(带有和不带有 url 参数) .我在上面用你的测试过,得到了相同的结果(除了数组中的更多信息)【参考方案2】:

我还没有完全探究为什么会发生这种情况的来龙去脉,但是在使用 taxonomy.php 并结合 URL 中与分类法相关的查询变量时遇到了类似的问题,并通过根据查询检查请求来解决它:

global $wp;
global $wp_query;

$queried_object = get_queried_object();

// Grab what should be the term slug from the request
$req_path_last = basename($wp->request);

// If the term doesn't match the slug from the request, and the request slug exists as a term, attempt to use the right one
if (isset($queried_object->slug)
    && $queried_object->slug !== $req_path_last
    && term_exists($req_path_last)
    && is_array($wp_query->query)) 

    // If the term slug has been queried, either as a string or string in an array, let's grab the tax slug (should be the key)
    foreach ($wp_query->query as $slug => $value) 
        if ($value === $req_path_last || (is_array($value) && in_array($req_path_last, $value))) 
            $tax_slug = $slug;
            break;
        
    

    // If we have a taxonomy slug, use it, otherwise grab all potential terms based on the URL slug and use the first one
    if (!empty($tax_slug)) 
        $new_queried_object = get_term_by('slug', $req_path_last, $tax_slug);
     else 
        $potential_terms = get_terms([
            'slug' => $req_path_last,
        ]);

        $new_queried_object = count($potential_terms) > 0 ? $potential_terms[0] : null;
    

    $queried_object = $new_queried_object instanceof WP_Term ? $new_queried_object : $queried_object;

【讨论】:

以上是关于是否有类似于 get_queried_object() 的函数,它只获取当前存档分类术语但忽略 url 查询参数?的主要内容,如果未能解决你的问题,请参考以下文章

是否有类似于 NSLevelIndicator 的自定义控件,具有反向着色?

是否有类似于 CombineLatest 仅适用于 1 个流的功能?

是否有类似于 :checked for input type text 的内容? [复制]

是否有类似于 lxml 或 nokogiri 的 Java 库? [关闭]

是否有几乎类似于 Django 模板语言的 PHP 模板语言?

是否有类似于 First 的 SQL 标准关键字,仅用于 Last