web-dev-qa-db-fra.com

Comment afficher le nom de l'auteur uniquement si l'article est dans une catégorie spécifique?

J'ai cette fonction dans mon thème, ce que je veux, c'est afficher le nom de l'auteur uniquement pour la catégorie sélectionnée (disons la catégorie id 90). Aucun nom d'auteur ne doit être affiché pour le reste des catégories.

Je crois que> in_category peut le faire. J'ai aussi essayé quelques fonctions mais pas de chance car je ne suis pas bon en codage.

Merci d'avance pour votre aide :)

Voici la fonction

if (! function_exists('mom_posts_meta')) {
function mom_posts_meta ($class = '', $display = null) {
    $num_comments = get_comments_number(); // get_comments_number returns only a numeric value

if ( comments_open() ) {
    if ( $num_comments == 0 ) {
        $comments = __('No Comments', 'theme');
    } elseif ( $num_comments > 1 ) {
        $comments = $num_comments .' '. __(' Comments', 'theme');
    } else {
        $comments = __('1 Comment', 'theme');
    }
    $write_comments = '<a href="' . get_comments_link() .'">'. $comments.'</a>';
} else {
    //$write_comments =  __('Comments off', 'theme');
    $write_comments = '';
}
$author_link = esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) );
if (class_exists('userpro_api')) {
    global $userpro;
$author_link = $userpro->permalink(get_the_author_meta( 'ID' ));
}

$categories = get_the_category();
$separator = ', ';
$cats = '';
if($categories){
    foreach($categories as $category) {
        $cats.= '<a href="'.get_category_link( $category->term_id ).'" title="' . esc_attr( sprintf( __( "View all posts in %s", 'theme' ), $category->name ) ) . '">'.$category->cat_name.'</a>'.$separator;
    }
}
$tags = get_the_tags();
$post_tags = '';
if($tags){
    foreach($tags as $tag) {
        $post_tags.= '<a href="'.get_tag_link( $tag->term_id ).'" title="' . esc_attr( sprintf( __( "View all posts in %s", 'theme' ), $tag->name ) ) . '">'.$tag->name.'</a>'.$separator;
    }
}
    $output = '<div class="mom-post-meta '.$class.'">';
    $author = mom_option('post_meta-author') == 1 ? '<span class="author vcard" itemprop="author" itemscope itemtype="https://schema.org/Person">'.__('Posted By:', 'theme').' <span class="fn" itemprop="name"><a href="'.$author_link.'">'.get_the_author().'</a></span></span>': '';
    $date = mom_option('post_meta-date') == 1 ? '<span>'.__('on:', 'theme').' <time datetime="'.get_the_time('c').'" class="updated">'.get_mom_date_format().'</time></span>': '';
    //$date = mom_option('post_meta-date') == 1 ? '<span>'.__('The last Update:', 'theme').' <time datetime="'.get_the_time('c').'" itemprop="datePublished" class="updated">'. get_post_modified_time(mom_option('date_format')).'</time></span>': '';
    $cat = mom_option('post_meta-cat') == 1 ? '<span>'.__('In', 'theme').': '.trim($cats, $separator).'</span>': '';
    $tag = mom_option('post_meta-tag') == 1 ? '<span>'.__('Tags', 'theme').': '.trim($post_tags, $separator).'</span>': '';
    $comments = mom_option('post_meta-comments') == 1 ? '<span>'.$write_comments.'</span>': '';
    if ($display == 'date_comments') {
        $output .= $date.$comments;
    } else {
        $output .= $author.$date.$cat.$tag.$comments;
    }
    if(function_exists('the_views')) {
        $output .= '<span>'.__('Views:', 'theme').' '.the_views(false).'</span>';
    }
    $output .= get_mom_show_review_score();
    if (is_single()) {
        if (mom_option('post_meta-tools') == true) {
        $output .= '<div class="post-tools">';
        $output .= '<a href="javascript:window.print()" rel="nofollow" class="print"><i class="fa-icon-print"> </i>'.__('Print').'</a>';
        $output .= '<a href="mailto:?subject='.get_the_title().'&body='.get_the_title().' '.get_permalink().'" rel="nofollow" class="email"><i class="fa-icon-envelope"> </i>'.__('Email', 'theme').'</a>';
        $output .= '</div>';
        }
    }

    $output .= '</div>';
    echo $output;
}

}

1
Davood

Oui, c’est la ligne que vous devez modifier et vous devez vérifier si le message en cours appartient à la catégorie spécifiée. Donc, vous pouvez remplacer cette ligne par ce code et il devrait faire l'affaire:

if(in_category(90)) {
    $author = mom_option('post_meta-author') == 1 ? '<span class="author vcard" itemprop="author" itemscope itemtype="https://schema.org/Person">'.__('Posted By:', 'theme').' <span class="fn" itemprop="name"><a href="'.$author_link.'">'.get_the_author().'</a></span></span>': '';
} else {
    $author = '';
}

Si cela ne fonctionne pas, vous avez soit un mauvais ID de catégorie, soit l'objet post n'est pas correctement défini à ce stade (c'est-à-dire que vous n'êtes pas dans la boucle).

Remarque: vous n'avez pas besoin d'utiliser l'ID de catégorie, vous pouvez utiliser le slug ou le nom si vous voulez que le code soit plus lisible.

2
Industrial Themes