web-dev-qa-db-fra.com

même modèle pour plusieurs types de messages personnalisés

Je sais que nous pourrions utiliser single-custom-post.php, mais j’ai plusieurs types de messages personnalisés, comme

america
nepal
norway

je peux faire single-america.php, single-nepal.php, single-norway. Mais ils ont presque le même code violant fondamentalement DRY. Je suis en train d'enregistrer ce message à partir de plugins. Comment afficher le modèle pour eux dans le plugin avec le nom permet de dire single-country.php?

Je pense que nous pouvons utiliser le filtre template_include? mais je n'ai toujours pas idée de le faire?

essayé comme ça

add_filter( 'template_include', function ( $template  ) {
    $cpt=["america","nepal","norway"]
    if ( //how to check condition if it is custom post type single ) {
        return ADVANCED_NOTES_DIR . 'country-single.php';
    }
    return $template ;
}) ;

Pouvons-nous utiliser le même modèle pour plusieurs types de messages personnalisés?

je vous remercie :)

2
stlawrance

Oui, vous pouvez utiliser template_include ou le plus spécifique single_template .

Exemple de code:

add_filter( 'single_template', function( $template ) {

  $cpt = [ 'america', 'nepal', 'norway' ];

  return in_array( get_queried_object()->post_type, $cpt, true )
    ? 'path/to/country-single.php'
    : $template;

} );

Le filtre single_template ne fonctionne que pour les requêtes uniques, vous n'avez donc pas besoin de vérifier si vous êtes sur une vue unique, mais vérifiez simplement que le type de publication demandé fait partie des CPT pour lesquels vous souhaitez remplacer le modèle.

J'ai utilisé get_queried_object() pour le scope.

2
gmazzap