✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Inkluderar anpassade mallar i våra WordPress-plugins

30

Jag tror att en av de mer underskattade aspekterna – eller kanske en av de sällan diskuterade aspekterna av anpassade plugin-utveckling – är möjligheten att inkludera anpassade mallar i våra WordPress-plugins.

Och, för att vara ärlig, jag förstår det: jag är en som är ganska trogen på vad som ska vara ett plugin och vad som ska vara ett tema.

Det är:

  • teman är för presentation,
  • plugins är funktionalitet.

Om jag inkluderar mallar i ett plugin, gör jag inte samma sak som när utvecklare inkluderar funktionalitet i sina teman?

Som med så många saker under utveckling tror jag att det beror på. Jag menar, att lägga till mycket funktionalitet som låser in dig i ett tema är något som jag inte är ett fan av. På samma sätt, om du har ett plugin som är tänkt att visa upp data på front-end och är temaagnostisk, då är det vettigt.

Så du måste vara klok i dina beslut.

Oavsett vilket finns det en vanlig uppsättning steg vi kan använda när vi inkluderar anpassade mallar i våra WordPress-plugins.

Och det är vad det här inlägget kommer att visa.

Om du ska inkludera anpassade mallar i plugin-programmet, kommer jag att anta att du använder både enstaka mallar och arkivmallar. Om inte, använd endast krokarna och koden nedan som du behöver.

Inkluderar anpassade mallar i våra WordPress-plugins

För båda, men vet dessa:

Med hjälp av dessa krokar kan du berätta för WordPress var de anpassade mallarna finns i ditt plugin.

Organisera mallar

För mig har jag vanligtvis en mallkatalog i mitt plugin som finns på samma nivå som tillgångar, src och leverantörskataloger.

Inkluderar anpassade mallar i våra WordPress-plugins

Detta gör det enkelt att veta var de finns och ger ett konsekvent sätt att inkludera dem i alla plugins som du byggt. Det finns trots allt något att säga för att vara konsekvent i de konventioner som vi använder.

Inklusive mallarna

Förutsatt att du har single-acme.php- mall och archive-acme.php- mall, är det lätt att inkludera det. Och även om jag är mer ett fan av att använda objektorienterad programmering, kommer jag att visa för att inkludera dessa mallar med hjälp av procedurkod.

Det är lätt att konvertera den här koden till objektorienterad kod om du vill. Dessutom kommer jag att anta att du inkluderar detta för anpassade inläggstyper också.

Du kan alltid utelämna ett villkor för en anpassad inläggstyp om du helt enkelt vill inkludera dessa mallar, men enligt min erfarenhet tycker jag att det är sällsynt att dessa situationer inte använder anpassade inläggstyper men jag känner inte till din situation.

Som sagt, här är koden.

Definiera krokar

Först måste vi definiera krokarna. Detta är relativt enkelt eftersom vi kommer att använda krokarna som beskrivs ovan.

Först, den enda mallen :

<?php

add_action('single_template', 'acmeIncludeSingleTemplate');
/**
 * Includes a custom, single template as included in a plugin. If
 * the template is being viewed for a custom post type then use it;
 * otherwise, use the template that's provided by WordPress at runtime.
 *
 * @param  string $originalTemplate the path to the original template
 *
 * @return string the path to the original template or the custom template.
 */
function acmeIncludeSingleTemplate($originalTemplate)
{
   // More to come...
}

Och sedan arkivmallen :

<?php

add_action('archive_template', 'acmeIncludeArchiveTemplate');
/**
 * Includes a custom, archive template as included in a plugin. If
 * the template is being viewed for a custom post type then use it;
 * otherwise, use the template that's provided by WordPress at runtime.
 *
 * @param  string $originalArchiveTemplate the path to the original template
 *
 * @return string the path to the original template or the custom template.
 */
function acmeIncludeArchiveTemplate($originalArchiveTemplate)
{
  // More to come...
}

Och nu kan vi implementera koden för var och en av funktionerna.

Lägga till koden

Så först ska vi titta på den enda mallen :

<?php

add_action('single_template', 'acmeIncludeSingleTemplate');
/**
 * Includes a custom, single template as included in a plugin. If
 * the template is being viewed for a custom post type then use it;
 * otherwise, use the template that's provided by WordPress at runtime.
 *
 * @param  string $originalTemplate the path to the original template
 *
 * @return string the path to the original template or the custom template.
 */
function acmeIncludeSingleTemplate($originalTemplate)
{
  $singleTemplate = plugin_dir_path(
    dirname(
      __DIR__) );
  $singleTemplate .= '/templates/single-acme.php';

  if ('acme-cpt' === get_post_type(get_the_ID())) {
      if (file_exists($singleTemplate)) {
          return $singleTemplate;
      }
  }

  return $originalTemplate;
}

Och nu arkivmallen :

<?php

add_action('archive_template', 'acmeIncludeArchiveTemplate');
/**
 * Includes a custom, archive template as included in a plugin. If
 * the template is being viewed for a custom post type then use it;
 * otherwise, use the template that's provided by WordPress at runtime.
 *
 * @param  string $originalArchiveTemplate the path to the original template
 *
 * @return string the path to the original template or the custom template.
 */
function acmeIncludeArchiveTemplate($originalArchiveTemplate)
{
  $archiveTemplate = plugin_dir_path(
    dirname(
      __DIR__) );
  $archiveTemplate .= '/templates/archive-acme.php';

  if ('acme-cpt' === get_post_type(get_the_ID())) {
      if (file_exists($archiveTemplate)) {
          return $archiveTemplate;
      }
  }

  return $originalArchiveTemplate;
}

Om du har ägnat stor uppmärksamhet åt koden vet du att det är väldigt lite som är annorlunda. Faktum är att den allmänna processen kan beskrivas enligt följande:

  1. definiera kroken,
  2. hitta mallen,
  3. kontrollera den anpassade posttypen,
  4. mallen finns, använd den
  5. Annars använder du standardmallen

Och detta är processen för både enstaka mallar och arkivmallar.

Skriva kompatibla mallar

Och slutligen, och detta är särskilt viktigt om du vill göra mallen så agnostisk som möjligt, jag försöker använda så många inbyggda WordPress-malltaggar som möjligt när jag visar innehållet relaterat till pluginet. Detta gör att temautvecklare enkelt kan styla det så att det passar deras tema.

Nej, du kommer inte att kunna tillgodose alla teman men sådan är naturen hos WordPress-teman. Poängen är att ta så mycket arbete som möjligt med att hämta och rendera data från mallen så att front-end-utvecklare enkelt kan hantera det.

Inspelningskälla: tommcfarlin.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer