是否有类似于 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_object
或get_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 库? [关闭]