web-dev-qa-db-fra.com

Content.php et content-single.php sont-ils les mêmes?

Je comprends que, lorsque vous utilisez get_template_part('content', get_post_format());, vous aiderez à choisir un post format pour une page spécifique en fonction du format de publication.

Et s'il n'y a pas de format de publication 'c'est-à-dire standard', il se repliera sur content.php

Mais que se passe-t-il si j'ai utilisé content-single.php avec une logique comme celle-ci:

if (get_post_format() == false) {
    get_template_part('content', 'single');
    } else {
        get_template_part('content', get_post_format());
}

Ai-je toujours besoin de la page content.php? Existe-t-il d'autres fonctionnalités que je ne connais pas?

6
Emad Aldeen

Non, content.php et content-single.php ne sont pas la même chose.

Dans votre exemple CODE:

if (get_post_format() == false) {
    get_template_part('content', 'single');
} else {
    get_template_part('content', get_post_format());
}

WordPress chargera content-single.php lorsque get_post_format() sera false. Cependant, get_template_part( $slug, $name ) peut toujours essayer de charger content.php lorsque vous l'appelez avec get_template_part('content', get_post_format()); dans l'exemple suivant:

  1. get_post_format() renvoie (par exemple) video.

  2. Mais vous n’avez pas le fichier de pièce modèle content-video.php.

En résumé, même lorsque get_post_format() n'est pas false, content.php vous fournira quand même le modèle par défaut si le modèle correspondant au format post correspondant n'a pas été créé.

ligne inférieure: quel que soit le $slug principal, il est toujours judicieux de conserver le fichier de pièce modèle par défaut en tant que pièce de modèle de secours finale (dans votre cas, content.php est ce fichier de pièce de modèle de secours par défaut). alors oui, vous en aurez peut-être encore besoin. Alors ne le supprimez pas, laissez-le tranquille.

Ce qui suit est la partie du code de la fonction principale get_template_part. Vous verrez que le noyau charge toujours $templates[] = "{$slug}.php"; en tant que fichier de modèle de secours final:

function get_template_part( $slug, $name = null ) {
    // ... more CODE from WP core
    $templates = array();
    $name = (string) $name;
    if ( '' !== $name )
        $templates[] = "{$slug}-{$name}.php";

    $templates[] = "{$slug}.php"; 
    locate_template($templates, true, false);
}

Ensuite, dans locate_template function, il parcourt le tableau $templates jusqu'à ce qu'il trouve le fichier correspondant, avec le CODE suivant:

function locate_template($template_names, $load = false, $require_once = true ) {
    $located = '';
    foreach ( (array) $template_names as $template_name ) {
        if ( !$template_name )
            continue;
        if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
            $located = STYLESHEETPATH . '/' . $template_name;
            break;
        } elseif ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
            $located = TEMPLATEPATH . '/' . $template_name;
            break;
        } elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
            $located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
            break;
        }
    }
    if ( $load && '' != $located )
        load_template( $located, $require_once );

    return $located;
}

Ainsi, comme vous pouvez le voir dans le code ci-dessus, si vous supprimez content.php et si l'utilisateur du thème a un format de publication pour lequel vous n'avez pas de fichier de modèle, WordPress ne trouvera pas le fichier de modèle auquel se référer, alors simplement. ne chargez rien dans ce cas. Lors de la dernière tentative, WordPress tente de charger un fichier pièce modèle à partir du répertoire wp-includes/theme-compat/ core, mais il n’existe pas de fichier pièce modèle content.php dans WP core.

Remarque: Cependant, si vous créez un thème enfant et que le thème parent contient déjà le fichier content.php, vous n'avez pas besoin du fichier content.php dans le thème enfant (si vous ne modifiez pas là-bas), car dans ce cas, WordPress utilisera le fichier content.php du thème parent comme fichier de pièce du modèle de repli.

2
Fayaz

Vous pourriez vous en tirer avec un seul modèle (content.php). C'est généralement moins qu'idéal.

Le blog de the teamtreehouse devrait clarifier votre question.

Pour moi, cette approche est une solution de secours.

0