我想让用户能够从前端创建各种自定义帖子,但根据指定的分类,返回链接到它的自定义帖子表单。因此,在获得所选分类法之后,我无法检查get\\u terms()请求中是否存在该分类法
我认为这是因为in\\u array()函数在多维数组方面做得不好。因此,我在这里搜索并找到了一种方法来生成另一个克服该问题的函数,但它仍然不起作用
这是我的代码:
<?php
$cptTax = $_GET[\'choosetax\'];
$tax1List = get_terms([
\'taxonomy\' => \'tax1\',
\'hide_empty\' => false,
]);
function in_array_r($needle, $haystack, $strict = false) {
foreach ($haystack as $item) {
if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
return true;
}
}
return false;
}
if( in_array_r($cptTax, $tax1List, false)): ?>
<form action="action" method="post" enctype="multipart/form-data">
我用var\\u dump()检查了$tax1List变量,并且slug就在那里。。。但函数返回false<谢谢你的帮助
最合适的回答,由SO网友:Sally CJ 整理而成
如果只想检查数据库中是否存在具有特定slug的术语,那么可以使用term_exists()
. 例如。
<?php if ( term_exists( $cptTax, \'tax1\' ) ) : ?>
Your form here.
<?php endif; ?>
但是如果您确实想检查术语是否在特定的术语数组中,那么您可以使用
wp_list_filter()
像这样:
<?php
$found_terms = wp_list_filter( $tax1List, array( // set one or more conditions
\'slug\' => $cptTax,
) );
if ( ! empty( $found_terms ) ) : ?>
Your form here.
<?php endif; ?>
或者你可以用
array_filter()
要使用自己的筛选函数,请执行以下操作:
$found_terms = array_filter( $tax1List, function ( $term ) use ( $cptTax ) {
return ( $cptTax === $term->slug ); // here, set your own custom logic
} );
if ( ! empty( $found_terms ) ) : ?>
Your form here.
<?php endif; ?>
正如您所知,您的自定义函数(
in_array_r()
) 返回false,因为
get_terms()
默认情况下,返回
objects 其中,每个都是
WP_Term
class. 所以基本上
if
在函数中需要一个如下条件
( is_object( $item ) && $needle === $item->slug )
. 然而,对于简单的过滤,我将使用
wp_list_filter()
在上面