Проверьте, опубликовал ли пользовательский термин таксономии опубликованные сообщения?

Я создаю тему журнала для клиента и использую таксономию «проблемы». Существует новая проблема каждую неделю, и у меня также есть функция, которая получает последнюю проблему. Но редактор создает новую проблему за несколько дней до публикации статей для этой проблемы. Моя текущая функция использует max (), чтобы найти самую высокую нумерованную проблему:

function get_issues() { $output = array(); $hlterms = get_terms('issue', array('hide_empty' => false)); foreach($hlterms as $term){ array_push($output, $term->name); } return $output; } function get_current_issue() { $current_issue_no = max(get_issues()); $current_issue = get_issue_by_number($current_issue_no); // Not important for question return $current_issue; } 

Все термины в «проблеме» – это числа (как строки), такие как 101, 402 и т. Д. Я использую наивысшее число, чтобы вернуть объект «Проблема», но здесь это не так важно, потому что, если я могу получить правильный номер, я могу просто передать это к уже действующей функции экземпляра get_issue_by_number() .

Итак, как я могу узнать, опубликовала ли эта «проблема» опубликованные сообщения? Идея заключается в том, что get_current_issue() возвращает только последнюю проблему, которая считается активной издателем. Они создают статьи заранее и дают им дату публикации через несколько дней после загрузки. Поэтому в идеале я мог бы написать функцию, которая вернула бы проблему 101, даже если 102 существует, потому что 102 не назначается никаким активным сообщениям. Но после того, как эти должности стали активными в установленную дату, функция начнет возвращать 102. Все мысли приветствуются, с удовольствием меняем свой подход, если у кого есть лучший способ сделать это.

Итак, быстрый пример того, что я надеюсь сделать:

У меня две «проблемы», 123 и 124. Я создал 123 некоторое время назад и с тех пор назначил опубликованные сообщения. Но я недавно создал 124, и пока нет опубликованных сообщений. Моя функция должна вернуть проблему 123 не 124, хотя 124 технически более поздняя. Тот факт, что в выпуске 123 имеется несколько опубликованных должностей, в то время как 124 ни один из них не смог бы определить этот результат. Затем, как только я опубликую сообщение, назначенное для выпуска 124, оно станет текущей проблемой.

 function get_issues() { $output = array(); $hlterms = get_terms('issue', array('orderby' => 'id', 'order' => 'DESC','hide_empty' => false)); foreach($hlterms as $term){ array_push($output, $term->term_id); } return $output; } 

Это вернет вам термин id в соответствии с последним, а затем во второй функции начнет итерацию, чтобы получить сообщения для последней проблемы.

 function get_posts_for_current_issue() { $total_issues = get_issues(); foreach($total_issues as $issue_id){ $args = array( 'post_type' => 'post', 'status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'issue', 'field' => 'id', 'terms' => $issue_id ) ) );//end of args $current_issue_posts = get_posts($args); if(!is_wp_error($current_issue_posts) && count($current_issue_posts)>0){ return $current_issue_posts; //will terminate the loop if posts found } }//end of foreach }//end of function 

Возможно, вам придется включить WP_DEBUG, поскольку я не могу проверить код.

Я бы предложил использовать 'field'=>'term_id' вместо 'field'=>'id' . Что касается страницы wordpress codex для get_terms (), это был бы правильный путь, и это была моя проблема во время тестирования.

Мой пример кода (чтобы проверить, опубликовал ли термин сообщения):

 function check_term_posts($tax_slug, $term_id) { $args = array( 'post_type' => 'post', 'status' => 'publish', 'tax_query' => array( array( 'taxonomy' => $tax_slug, 'field' => 'term_id', 'terms' => $term_id ) ) ); $term_query = new WP_Query($args); $term_posts_count = $term_query->found_posts; if( $term_posts_count>0 ){ return true; } else { return false; } }