wp_category map: идентификатор и имя - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь разработать плагин для WordPress, который получает сообщения по категориям и отображает их с помощью JavaScript.

Мне нужно отобразить название категории.

Я думал, что мог бы php вывести объект всех категорий: их идентификатор и имя в одном объекте.

Затем я мог бы использовать это для перевода идентификатора категории сообщения в имя.

Я пытался сделать это с:

'all_categories' => array_map(
     function ($fiteredCat) {
         return (object) [
             $fiteredCat->term_id => $fiteredCat->cat_name
         ];
      },
      array_filter($categories, function ($cat) {
         // exclude 21 & 1
         return $cat->term_id !== 21 && $cat->term_id !== 1;
      }, ARRAY_FILTER_USE_BOTH)) 

но это вывод

"all_categories" : {
    "0" : {
        "15" : Case Studies
    },
    "1" : {
        "17" : Events
    },
    "4" : {
        "13" : Useful Documents
    },
    "5" : {
        "3" : videos
    },
    "6" : {
        "16" : Webinars
    },
    "7" : {
        12" : White Papers
    }
}

Как я могу использовать PHP, чтобы получить это?:

"all_categories" : {
    "15": "Case Studies",
    "17": "Events",
    ....
}

Ответы [ 2 ]

0 голосов
/ 08 июня 2019
$post_categories = [];

 array_walk(array_filter($categories, function ($cat) { 
     // exclude 21 & 1 
     return $cat->term_id !== 21 && $cat->term_id !== 1;
 }, ARRAY_FILTER_USE_BOTH), 
 function ($fiteredCat) use(&$post_categories){ 
     $post_categories[$fiteredCat->term_id] = $fiteredCat->cat_name; 
 }); 

 echo json_encode(['post_categories' => $post_categories]);
0 голосов
/ 08 июня 2019

если вы вернете это

"post_categories" : {
    "15": "Case Studies",
    "17": "Events",
    ....
}

в javascript, вы не сможете перебрать отдельные категории. Я предлагаю вам либо использовать многомерные массивы, либо у вас есть массив объектов.

Многомерный массив [["15","Case Studies"],["17","Events"]]

тогда в вашем javascript вы можете перебирать массив с любым циклом, который вы предпочитаете

returned_array.forEach((arr)=>{
  let key = arr[0];
  let value = arr[1];
  //Then you can do what you want with the data
}) 

Массив объектов [{"15":"Case Studies"},{"17":"Events"}]

тогда вы делаете в основном то же самое, что просматриваете свой массив

returned_array.forEach((obj)=>{
  let key = Object.keys(obj);
  let value = obj[key];
  //Then you can do what you want with the data
}) 

надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...