将$_POST返回值与术语数组进行比较

时间:2020-12-09 作者:jam

我试图将从AJAX返回的Post值与可用的分类术语\\u id进行比较,但不知何故,我运气不佳。例如,基于用户选择的My$\\u POST[\'recvid\']值为“70=开(&;O);72=打开(&N);74=开\'。

    if( $brands = get_terms( array( \'taxonomy\' => \'recipebrands\' ) ) ) :  //constructing array of available terms
    $brands_terms = array(); 
    
    foreach( $brands as $brand ) { //going thru all terms
                
     if( ????? ) // trying to compare if POSTED values are within available term array
           $brands_terms[] = $brand->slug;   //if yes, then build the array of all slugs
            }
        
 endif;
不知何故,我被困在if条款内,无法想出如何构建arrayI尝试的$brands\\u条款isset( $_POST[\'recvid\'][$brand->term_id ] ) && $_POST[\'recvid\'][$brand->term_id] == \'on\') 但是没有运气。

来自ajax的数据包含“recvid”变量:

jQuery.ajax({
                url: my_custom_vars.ajax_url,
                
                data: {
                    action: \'my_filter_function\',
                    recvid: filter.serialize() // form data
                },
是的,我知道,应该更多地了解这些事情:)

1 个回复
SO网友:Kaspars Foigts

只需检查$\\u POST是否包含id为相应术语的键。

if (isset($_POST[\'recvid\'][$term->term_id])) {
然而,我不会重复所有的条款。get_terms 函数具有相应的选项。所以,要接收所有发布的ID,您可以这样做(还要注意,第一个参数可能是字符串,不需要数组):

$brands = get_terms(\'recipebrands\', [ 
    \'include\' => array_filter(array_keys($_POST[\'recvid\']), function($value) { return is_numeric($value); }),
]);
上述代码的作用是什么?

  • array_keys 显然,返回$_POST数组键
  • array_filter 仅过滤出数字键(请参见匿名函数)
  • include 选项get_brands() 允许您指定所需术语的确切ID