web-dev-qa-db-fra.com

Vérifier si un terme de taxonomie personnalisé a été publié?

Je crée un thème de magazine pour un client et utilise une taxonomie personnalisée. Il y a un nouveau numéro chaque semaine et j'ai aussi une fonction qui reprend le dernier numéro. Mais l'éditeur crée un nouveau numéro quelques jours avant la publication des articles de ce numéro. Ma fonction actuelle utilise max () pour rechercher uniquement le problème le plus numéroté:

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;
}

Tous les termes de 'issue' sont des nombres (tels que des chaînes) tels que 101 402, etc. à la fonction d'instanciation déjà fonctionnelle get_issue_by_number().

Alors, comment puis-je savoir si le "problème" renvoyé a été publié? L'idée est que la fonction get_current_issue() ne renvoie que le dernier numéro considéré comme actif par l'éditeur. Ils créent des articles à l'avance et leur donnent une date de publication à quelques jours du téléchargement. Donc, idéalement, je pourrais écrire une fonction qui renverrait le numéro 101, même si 102 existe, car 102 n'est affecté à aucune publication active. Mais une fois que ces postes sont devenus actifs à la date prévue, la fonction a commencé à revenir 102. Toutes les pensées sont les bienvenues, heureuses de changer d’approche si quelqu'un a un meilleur moyen de le faire.

Donc, un exemple rapide de ce que j'espère accomplir:

J'ai deux "numéros", 123 et 124. J'ai créé 123 il y a quelque temps et je lui ai depuis affecté des publications. Mais je viens de créer 124 et il n'y a pas encore de messages publiés. Ma fonction devrait rendre le numéro 123 non 124, même si ce dernier est techniquement plus récent. Le fait que le numéro 123 comporte un certain nombre de publications publiées, alors que 124 n'en a aucune, déterminerait ce résultat. Ensuite, une fois que je publierai un article affecté à la publication 124, il deviendra la publication actuelle.

2
ian
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;
}

Cela vous renverrait votre identifiant selon la date la plus récente, puis, dans votre deuxième fonction, commencerait par une itération pour obtenir les publications du dernier numéro.

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

Vous devrez peut-être activer WP_DEBUG, car je ne peux pas tester le code.

1
sven

Je suggérerais d'utiliser 'field'=>'term_id' au lieu de 'field'=>'id'. En ce qui concerne wordpress page codex pour get_terms (), ce serait la bonne manière et c’était aussi mon problème lors des tests.

Mon exemple de code (pour vérifier si term a publié des articles):

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;
    }
}
2
stefan-mewa
if (get_term($term->term_id, 'taxonomy')->count > 0 ) {

}
0
Flector