如何从Wordpress中的get_the_terms中获取term_ids

时间:2017-09-12 09:41:30

标签: php wordpress

解决

我找到了答案。

我的问题是(正如你们许多人已经告诉我的那样)我正在编码和解码我的东西。我现在正在做的是我删除了编码和解码并改变了这个:

array_push($results, array(
                   'id' => $id,
                   'tax' => get_the_terms( $post->ID, 'type', $id ),

               ));

到此:

array_push($results, (object) array(
                       'id' => $id,
                       'tax' => get_the_terms( $post->ID, 'type', $id ),

                   ));

现在我能够获得以下税收:

foreach($value->tax as $tax){

                             echo  $tax->name . ', ' ;

                    }

没有ajax通过复制找到的第一个分类法并将其放在每个项目上来搞砸我的循​​环。

谢谢大家的帮助。

  

问题解决了

     

我正在构建一个使用自定义AJAX过滤器的wordpress网站   已链接到我的自定义类别。

     

这是我的功能 ajax-filter.php

function filter() {
               $results = array();


           if (!empty($the_query->posts))
           {
               foreach ($the_query->posts as $post)
               {
                   $id = $post->ID;
                   array_push($results, array(
                       'id' => $id,
                         'tax' => get_the_terms( $post->ID, 'type', $id ),

                   ));
               }
           }
              wp_reset_postdata();

      $someJSON = json_encode($results);
      // Convert JSON string to Object
      $someObject = json_decode($someJSON);

      foreach($someObject as $key => $value) {
             echo $value->title;

            }
  die;
}
  add_action( 'wp_ajax_filter', 'filter' );
  add_action( 'wp_ajax_nopriv_filter', 'filter' );
     

我的问题是:

     

我如何以我使用的方式将 tax 中的数据用于<​​em> term-id   我的 ajax-filter.php?使用我的数据($ value-&gt; title)

Array
(
    [0] => Array
          [title] => title
          [tax] => Array
                (
                    [0] => WP_Term Object
                        (
                            [term_id] => 54
)

                )

        )

1 个答案:

答案 0 :(得分:1)

首先,在创建代码的最小示例方面做得很好,它使我们更容易看到问题以及如何提供帮助:)

现在回答你的问题:

在您回答实际问题之前,有两个问题

  1. get_the_terms只需要2个参数 - 您不需要传递第3个参数$ id。 id已在第一个参数中传递
  2. get_the_terms返回一个数组,因为帖子可以有多个与之关联的术语。您需要考虑如何处理多个术语。
  3. 每个帖子处理一个字词

    现在,我假设你只会有一个与帖子相关联的词汇,或者如果还有更多的词汇只返回第一个词。

    按如下方式更新您的代码 - 正在进行的操作的说明在注释中:

      if (!empty($the_query->posts)){
           foreach ($the_query->posts as $post){
    
               // add this before you push the the values to your $results array
    
               // get an array with the term_ids only
               $term_ids = array();
               $term_objs = get_the_terms( $post->ID, 'type' );
    
               // get_the_terms returns an array of WP_Term objects
               foreach ($term_objs as $term_obj)
                   $term_ids[] = $term_obj->term_id; // get the id from the WP_Term object
    
               // $term_ids could have many ids, so for the purpose of your example
               // we're just going to get the first one
               // You will need to decide how you'll handle multiple ids
               if ($term_ids) $term_id = $term_ids[0]; 
    
               $id = $post->ID;
               array_push($results, array(
                   'id' => $id,
                   [...] // your other values here
                   'tax' => $term_id, // add just the single term id value
               ));
           }
       }
    

    这将全部发送到您的$results数组,如下所示:     排列     (         [0] =&gt;排列             (               [title] =&gt;标题               [tax] =&gt; 54             )     )

    现在,您可以在循环中访问术语ID,例如$value->tax,例如

    foreach($someObject as $key => $value) {
         echo $value->title;
         echo $value->tax; // or whatever you want to do with it....
    }
    

    处理每个帖子的多个字词

    如果您想处理多个术语,可以推送$term_ids数组:

               foreach ($term_objs as $term_obj)
                   $term_ids[] = $term_obj->term_id; 
    
               array_push($results, array(
                   'id' => $id,
                   [...] // your other values here
                   'tax' => $term_ids, // add the array of  term ids
               ));
    

    ...然后在检索它们时遍历数组:

    foreach($someObject as $key => $value) {
        $term_ids = $value->tax;
        foreach ($term_ids as $term_id) 
            echo $term_id; // or whatever you want to do with it....
    }