Plugin Templating in WordPress

Als het gaat om het maken van een Aangepast berichttype in een WordPress-plug-in, is er altijd hetzelfde probleem: u moet een aangepast bericht maken single- [cpt_slug] php bestand in uw themamap als u de standaardmap niet wilt gebruiken single.php bestand van uw thema.

In dit bericht wil ik twee aspecten bespreken van het gebruik van aangepaste sjablonen. De eerste stap is om te laten zien dat we een aangepast bestand direct in de plug-in zelf kunnen gebruiken in plaats van de standaard te laden single.php, en de tweede is hoe je je eigen aangepast bestand kunt maken in je themamap.

Veel plug-ins, zoals Easy Digital Downloads of Shopp, gebruiken deze methode: de plug-in controleert of u een aangepaste sjabloon definieert in uw themamap, als dit het geval is, wordt het bestand geladen, anders wordt het standaard plug-insjabloonbestand geladen. In beide gevallen is de standaardinstelling van het thema single.php bestand is niet geladen.


Definieer de plug-in en de structuur

De allereerste stap is om een ​​plug-in te maken, laten we het "Sjabloonkiezer". Maak een "template-chooser"map onder / Wp-content / plugins /, met de volgende structuur:

De plugin-structuur

Open vervolgens het hoofdbestand template-choose.php en plaats de volgende plug-in header-code:

/ * Plugin Naam: CPT-sjabloon Kiezer Plugin URL: http://wp.tutsplus.com/ Beschrijving: laadt een aangepast sjabloonbestand in plaats van de standaard single.php Versie: 0.1 Auteur: Remi Corson Auteur URI: http: // wp .tutsplus.com / * /

Definieer de invoegtoepassingen voor invoegtoepassingen

Later in de plug-in moeten we de plugin-URL en het bijbehorende pad gemakkelijk kunnen ophalen. Daarom moeten we een paar constanten definiëren:

 / * | ----------------------------------------------- --------------------------- | CONSTANTS | ------------------------------------------------ -------------------------- * / if (! defined ('RC_TC_BASE_FILE')) define ('RC_TC_BASE_FILE', __FILE__); if (! defined ('RC_TC_BASE_DIR')) define ('RC_TC_BASE_DIR', dirname (RC_TC_BASE_FILE)); if (! defined ('RC_TC_PLUGIN_URL')) define ('RC_TC_PLUGIN_URL', plugin_dir_url (__FILE__));

Registreer een aangepast berichttype

Om verder te gaan, moeten we een nieuw aangepast berichttype instellen, laten we een "getuigenis"CPT, met een aantal zeer eenvoudige ondersteuningen en functies. Omdat het doel van de post niet is om aan te leren hoe een aangepast berichttype moet worden gemaakt, zal ik een vrij eenvoudige code gebruiken die is onderverdeeld in 3 delen: de aangepaste labels van het posttype, de ondersteuningen en de aangepaste argumenten voor het type bericht. Alles wat in een enkele functie is ingesloten:

 / * | ----------------------------------------------- --------------------------- | BEPAAL HET AANGEPASTE POSTTYPE | -------------------------------------------- ------------------------------ * / / ** * Installatiewaardering Aangepast berichttype * * @since 1.0 * / function rc_tc_setup_post_types () // Aangepaste berichttypenlabels $ labels = array ('name' => esc_html __ ('Testimonials', 'rc_tc'), 'singular_name' => esc_html __ ('Testimonial', 'rc_tc'), 'add_new' = > esc_html __ ('Nieuw toevoegen', 'rc_tc'), 'add_new_item' => esc_html __ ('Nieuw testimonial toevoegen', 'rc_tc'), 'edit_item' => esc_html __ ('Edit Testimonial', 'rc_tc'), 'new_item '=> esc_html __ (' Nieuw Testimonial ',' rc_tc '),' view_item '=> esc_html __ (' View Testimonial ',' rc_tc '),' search_items '=> esc_html __ (' Search Testimonial ',' rc_tc '),' not_found '=> esc_html __ (' Geen getuigschrift gevonden ',' rc_tc '),' not_found_in_trash '=> esc_html __ (' Geen getuige gevonden in de prullenmand ',' rc_tc '),' parent_item_colon '=> "); // Ondersteunt $ ondersteunt = array ('title', 'editor'); // Aangepast berichttype Ondersteunt $ args = array ('labels' => $ labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => array ('slug' => 'testimonials', 'with_front' => true ), 'capability_type' => 'post', 'hierarchical' => false, 'menu_position' => 25, 'ondersteunt' => $ ondersteunt, 'menu_icon' => RC_TC_PLUGIN_URL. '/includes/images/testimonials_icon.png', // u kunt hier uw eigen pictogram instellen); // Registreer tenslotte het "testimonial" aangepaste berichttype register_post_type ('testimonial', $ args);  add_action ('init', 'rc_tc_setup_post_types');

Gebruik de standaard niet single.php het dossier

Nu ons aangepaste berichttype is geregistreerd, moeten we een functie maken die WordPress vertelt niet om de standaard te gebruiken single.php van het thema.

Omdat ja standaard bij het weergeven van een aangepast berichttype op de frontend WordPress controleert of een bestand is gebeld single-testimonial.php bestaat en zal het laden. Zo niet, dan zal het zoeken naar de single.php. Maar we willen geen van hen gebruiken.

We willen dat WordPress een aangepast bestand laadt vanuit de plug-in. Om dit te doen, moeten we een nieuwe functie aan de "template_include"filter. In deze functie is het doel om het type van de post te controleren en als gevolg daarvan te handelen:

 / * | ----------------------------------------------- --------------------------- | FILTERS | ------------------------------------------------ -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser'); / * | ----------------------------------------------- --------------------------- | PLUGINFUNCTIES | ----------------------------------------------- --------------------------- * / / ** * Retourneert sjabloonbestand * * @since 1.0 * / function rc_tc_template_chooser ($ template)  // Post ID $ post_id = get_the_ID (); // Voor alle andere CPT if (get_post_type ($ post_id)! = 'Testimonial') return $ template;  // Anders gebruik aangepaste sjabloon if (is_single ()) return rc_tc_get_template_hierarchy ('single'); 

Laad de juiste sjabloon

Zoals je kunt zien, bellen we op regel 33 een nieuwe functie rc_tc_get_template_hierarchy (). Dit is de functie die controleert of WordPress het aangepaste bestand van de plug-in of de sjabloon uit de themamap moet laden.

Houd er rekening mee dat wanneer ik het heb over de "sjabloon van de themamap", ik het heb over een aangepast bestand dat is geladen in plaats van het single.php.

Stel dat u de sjabloon die in de plug-in is opgenomen niet wilt laden, maar uw eigen aangepaste sjabloon wilt maken, het enige wat u hoeft te doen is een nieuwe map in de themamap aan te maken, noem deze "plugin_template"en maak binnen deze map een single.php het dossier. Dit wordt je nieuwe standaard single.php alleen geladen voor getuigschriften weergegeven op de frontend.

Ben je nog steeds bij me? Oké, laten we de functie maken:

 / ** * Haal de aangepaste sjabloon op als deze is ingesteld * * @since 1.0 * / function rc_tc_get_template_hierarchy ($ template) // Haal de sjabloon slug $ template_slug = rtrim ($ template, '.php'); $ template = $ template_slug. '.Php'; // Controleer of er een aangepaste sjabloon bestaat in de themamap, zo niet, laad dan het template-bestand van de plug-in als ($ theme_file = locate_template (array ('plugin_template /'. $ Template))) $ file = $ theme_file;  else $ file = RC_TC_BASE_DIR. '/ includes / templates /'. $ Template;  return apply_filters ('rc_repl_template_'. $ template, $ file);  / * | ---------------------------------------------- ---------------------------- | FILTERS | ------------------------------------------------ -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser');

De standaardsjabloon van plug-in

Maak nu een nieuw getuigenis in de administratie. Open dan includes / templates / single.php en kopieer en plak deze eenvoudige code:

  we zitten in het aangepaste bestand met plug-ins 

Als u de testimonial op de frontend visualiseert, ziet u het "we are in the plugin custom file". Dat is wat we wilden. Maar als het sjabloonbestand voor de invoegtoepassing niet voldoet aan uw behoeften of als u eenvoudig een persoonlijker ontwerp wilt maken, kunt u een bestand in uw themamap maken.


De standaardsjabloon voor thema's

Als u een aangepaste sjabloon wilt maken die niet de standaardsjabloon uit de plug-in gebruikt, kunt u een nieuwe map maken met de naam "plugin_templates"in uw themamap Maak een nieuw bestand met de naam single.php en plaats deze code:

  we zijn in het thema aangepast bestand 

Conclusie

Wat hebben we precies gedaan? Nou, we hebben een plug-in gemaakt die een aangepast berichttype registreert "getuigenisWe hebben de functionaliteit bereikt om een ​​aangepast bestand te laden dat is opgeslagen in de map met plug-ins in plaats van de standaard single.php of single-testimonial.php bestanden uit de themamap. We hebben ook een aangepast bestand kunnen laden in plaats van de themamap die zich onder "plugin_templates".

Waarom is dit leuk? Omdat u, wanneer u uw eigen plug-in maakt, een standaardsjabloon kunt opgeven om het aangepaste berichttype weer te geven, zodat u de uiteindelijke gebruiker de keuze geeft om zijn eigen sjabloon te gebruiken of niet.