J'écris un plugin qui crée un type de publication personnalisé nommé "my_plugin_lesson":
$args = array (
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'lessons', 'with_front' => false)
);
register_post_type ('my_plugin_lesson', $args);
Le type de publication personnalisé a une archive et l'URL de l'archive est:
http://example.com/lessons
Je veux personnaliser l'apparence de cette archive; Je veux lister les articles sous forme de tableau, plutôt que les archives standard des articles de blog WordPress. Je comprends qu'un modèle d'archive personnalisé pourrait être créé dans le thème en créant le archive-my_plugin_lesson.php
fichier; cependant, j'aimerais que le plugin fonctionne avec n'importe quel thème.
Comment puis-je modifier le contenu de la page d'archive sans ajouter ou modifier des fichiers de thème?
Edit:
je comprends que je pourrais utiliser le archive_template
crochet du filtre. Cependant, tout cela ne fait que remplacer le modèle de thème, qui doit encore être spécifique au thème. Par exemple, à peu près tous les modèles de thème aura besoin des get_header
, get_sidebar
et des get_footer
fonctions, mais ce que l'identifiant du contenu devrait <div>
être? C'est différent dans chaque thème.
Ce que je voudrais faire, c'est remplacer le contenu lui-même par mon propre contenu et l'utiliser à la place de la page d'archive pour mon type de publication personnalisé.
la source
Vous pouvez utiliser le
archive_template
hook pour traiter le contenu du modèle d'archive d'un thème, en utilisant le schéma ci-dessous, mais vous ne pourrez évidemment traiter qu'une fraction des thèmes, étant donné qu'un modèle peut essentiellement contenir n'importe quelle chose ancienne .Le schéma consiste à charger le modèle dans une chaîne (
$tpl_str
) dans learchive_template
filtre, à remplacer votre contenu, à inclure la chaîne (à l'aide de l'astuceeval( '?>' . $tpl_str );
), puis à renvoyer un fichier vide de sorte queinclude
dans "wp-includes / template-loader.php" devient un no-op.Vous trouverez ci-dessous une version piratée du code que j'utilise dans un plugin, qui cible les modèles "classiques" qui utilisent
get_template_part
et est plus concerné par le traitement de modèles uniques que d'archive, mais devrait vous aider à démarrer. La configuration est que le plugin a un sous-répertoire appelé "modèles" qui contient un fichier vierge ("null.php") et des modèles de contenu (par exemple "content-single-posttype1.php", "content-archive-postype1.php") ainsi qu'un modèle de repli "single.php" pour le cas unique, et utilise une version personnaliséeget_template_part
qui ressemble à ce répertoire.La coutume
get_template_part
:Pour être complet, voici la solution de remplacement "single.php", qui utilise la coutume
get_template_part
:la source
J'ai réfléchi à la même question, et c'est la solution hypothétique que j'ai trouvée:
Lors de l'activation du plugin, créez une page en utilisant wp_insert_post avec le nom étant le type de publication et le contenu étant le shortcode.
Vous pouvez fournir des options dans le shortcode pour des considérations de style supplémentaires, ou ajouter des classes au conteneur de publication pour faire correspondre les styles spécifiques ou personnalisés au thème. L'utilisateur peut également ajouter du contenu supplémentaire avant / après la boucle en modifiant la page.
la source
Vous pouvez utiliser le filtre
single_template
. Un exemple de base tiré du Codex :la source
archive_template
, mais je ne pense pas que cela fonctionnera pour ce que j'essaie de faire. J'ai édité ma question avec plus d'informations.