Как убрать посты с статусом (удалены или черновик) общего списка?
Здравствуйте.
Для получения необходимых данных из БД сделал запрос:
function get_events() { global $wpdb; $events = $wpdb->get_results( " SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = 'data-provedeniya' " ); return $events; }
После чего полученные данные передаю в другую функцию, которая кодируе тв json формат для дальнейшей работы с этими данными.
function get_json_for_calendar($arr) { $data = ''; foreach ($arr as $item) { $calendarEvent = get_the_term_list($item->post_id, 'calendars', '<div>Категория мероприятия «', ' • ', '»</div>'); $jsonData = json_encode($calendarEvent); $timeElement = $item->meta_value; $date = DateTime::createFromFormat('Ymd', $timeElement); $data .= '{ "date": "' . $date->format('Y-m-d') . '", "title": "' . get_the_title($item->post_id) . '", "description": ' . $jsonData . ', "url": "' . get_permalink($item->post_id) . '" },'; } $json = substr($data, 0, -1); return $json; }
Заметил, что удаленные (в корзину) посты или черновики попадают в общий список, чего быть не должно.
Мое предположение, что функция get_events(); передает в функцию get_json_for_calendar($arr) все ID постов, без разницы какой у них post_type.
Соответственно посты никак не фильтруются и в общий список попадают (get_the_title($item->post_id)) все опубликованные, удаленные записи, а так же записи с другими статусами (на утверждение, черновик и т.д.).
Не могу составить проверку, что бы исключить все записи, кроме publish. Помогите решить эту задачу.
Я бы изменил запрос
можно еще в цикле проверять post_status
второй вариант заметно увеличит количество запросов к бд что не есть гуд...
Подсказали более элегантное и оптимальное решение – объеденить таблицы (я к сожалению с БД могу проводить элементарные операции и с JOIN ранее не встречался). А оказывается к райне удобно: