检查GET_TERMS请求中是否存在插件

时间:2021-08-20 作者:T3mmX


我想让用户能够从前端创建各种自定义帖子,但根据指定的分类,返回链接到它的自定义帖子表单。因此,在获得所选分类法之后,我无法检查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<谢谢你的帮助

1 个回复
最合适的回答,由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() 在上面

相关推荐

我在相关产品“TAX_QUERY”‘TERMS’值方面遇到问题

我有两种自定义页面类型。第一个是;“产品”;第二个是;附件;。在产品页面上,有“附件”类别;“输入”;罗列立柱。输入对值进行编码,如;06010603等;。这些代码也是产品代码。当我用metabox输入产品代码时,功能会在某些区域启动。如产品表、产品图片等。如何在术语部分打印此代码。提前感谢你们的帮助。工作代码;<?php $article_list = get_post_meta ( get_the_ID(), \'products_article_list\', t