web-dev-qa-db-fra.com

Utiliser single.php à partir du dossier du plugin au lieu du dossier de modèle par défaut

J'essaie de comprendre comment utiliser un autre single.php pour un plugin personnalisé que je crée. C'est pour un type de message personnalisé.

Parce que si les gens installent ce plugin, ils n'auront pas le fichier unique single-product.php dans leur dossier de thèmes. C'est pourquoi je veux que ce soit dans le dossier du plugin.

Existe-t-il un moyen de changer le chemin du fichier single.php de ce type de message personnalisé ou un moyen de générer automatiquement le fichier dans le dossier du thème après l'installation de ce plugin?

Merci d'avance

2
user3428971

Je pense qu'un crochet dans template_include comme décrit ici pourrait être un moyen approprié de le faire.

Le code pourrait être comme ceci:

add_filter('template_include', 'my_plugin_templates');
function my_plugin_templates( $template ) {
    $post_types = array('post');

    if (is_singular($post_types)) {
        $template = 'path/to/singular/template/in/plugin/folder.php';
    }

    return $template;
}
4
flomei

Les plugins ne doivent * jamais avoir d'effet visuel autre qu'un widget ou un shortcode. Si vous sentez le besoin de manipuler les fichiers de thème, alors vous le faites probablement mal.

* il y a toujours des exceptions comme cibler un thème spécifique ou faire quelque chose qui est tellement agnostique (tel que popup/lightbox) qu'il y a très peu de chance de rompre le thème ou d'obtenir un résultat déplaisant.

EDIT de COMMENTAIRES

Il s'agit d'un problème à la limite sans aucun type de réponse blanc/noir. D'après ce que vous décrivez, vous auriez dû créer un thème et non un plug-in, mais je comprends que la tâche vous a été confiée. La bonne façon, c'est comme avec woocommerce - des codes courts et des widgets qui affichent le contenu géré en tant que CPT, sinon vous aurez plus de chances de ne pas jouer à Nice avec tous les thèmes.

1
Mark Kaplun

get_custom_post_type_template est la fonction que WordPress devrait appeler lors de la récupération du contenu. Notez que la fonction de filtre définie par le plug-in doit renvoyer un chemin complet vers un fichier de modèle, sinon la page résultante sera vide. Le fichier de modèle doit avoir les mêmes entrées que le fichier single.php dans le thème. Pour plus d'informations, visitez le site.

 <?php
    function get_custom_post_type_template($single_template) {
    global $post;

       if ($post->post_type == 'my_post_type') {
          $single_template = dirname( __FILE__ ) . '/post-type-template.php';
       }
    return $single_template;
    }
    add_filter( 'single_template', 'get_custom_post_type_template' );
?>
0
kamleshpal