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

Använda anpassade filter med kortkoder

19

När du väl förstår Shortcode API och hur filter fungerar är det enkelt att implementera dem i WordPress.

Använda anpassade filter med kortkoder

Och när du kan blanda de två kan du göra mycket mer än vanligt än när de fungerar oberoende av varandra.

Specifikt kan du filtrera data som finns i resultatet av kortkoden, och detta kan vara särskilt användbart för andra utvecklare. Om du är bekant med att implementera anpassade filter är det inte mycket annorlunda att göra detta inom ramen för en kort kod.

Men om du aldrig har använt vare sig shortcode API eller funktionaliteten tidigare, är det fortfarande enkelt att göra.

Anpassade filter med kortkoder

För det här inlägget kommer vi att använda ett relativt konstruerat exempel. Det vill säga, kortkoden kommer att resultera i något statiskt. Anledningen är att det gör det enkelt att demonstrera i ett inlägg och implementera i din kod.

Kortkoden

För att implementera en kortkod behöver du två saker:

  1. ett anpassat namn för kortkoden,
  2. en funktion som används för att släppa information varhelst kortkoden används.
<?php

namespace Acme;

add_shortcode('a_simple_example', __NAMESPACE__. 'aSimpleExample');
/**
 * Replaces [a_simple_example] short code with the text "This is the result of an example shortcode."
 * whenever the shortcode is placed in a post or page.
 */
function aSimpleExample()
{
  return 'This is the result of an example shortcode.';
}

Notera i koden ovan; Jag har prefixet funktionen med. __NAMESPACE__Detta beror på att funktionen finns inom ett anpassat namnområde (som du kan se överst i filen).

Utan detta prefix kommer funktionen inte att anropas. Om du väljer att inte använda namnutrymmen kan du avstå från både prefixet och de inledande snedstrecket i ditt funktionsnamn.

Observera att vi återkommer till den här funktionen så snart vi har filtret på plats.

Filtret

Att lägga till ett anpassat filter liknar att lägga till en kortkod. Du behöver:

  1. ett anpassat filternamn,
  2. en funktion som används för att filtrera den inkommande informationen (och filter bör generellt acceptera minst en parameter som naturligtvis är data som ska filtreras):

För att hålla överensstämmelse med exemplet ovan låt oss säga att vi bara vill byta ut några ord i kortkoden :

<?php

namespace Acme;

add_filter('custom_shortcode_example', __NAMESPACE__. 'aSimpleShortcodeFilter');
/**
 * Replaces [a simple example] short code with the text "This is the result of an example shortcode."
 * whenever the shortcode is placed in a post or page.
 *
 * @param string $input the input to filter.
 *
 * @return string       the result of the filter running on the input
 */
function aSimpleShortcodeFilter(string $input): string
{
  return str_ireplace(
    'an example shortcode.',
    'a filtered shortcode',
    $input
  );
}

Detta kommer att ersätta innehållet i:

Detta är resultatet av en exempelkortkod.

Till:

Detta är resultatet av en filtrerad kortkod.

Men vi måste fortfarande knyta ihop dem två.

Återbesöker kortkoden

För att associera de två funktionerna tillsammans måste vi se till att funktionen för kortkoden tillämpar filtret på värdet som det returnerar.

Lyckligtvis är det enkelt att implementera det, särskilt eftersom vi har allt vi behöver:

<?php

namespace Acme;

add_shortcode('a_simple_example', __NAMESPACE__. 'aSimpleExample');
/**
 * Replaces [a_simple_example] short code with the text "This is the result of an example shortcode."
 * whenever the shortcode is placed in a post or page.
 */
function aSimpleExample()
{
  return apply_filters('custom_shortcode_example', 'This is the result of an example shortcode.');
}

I ett mest konkret exempel rekommenderar jag alltid att kontrollera att resultatet av parametern inte är tomt, att den innehåller strängen som jag letar efter, eller något liknande.

Det vill säga, jag gillar ofta att öppna med en vaktklausul. Om testet misslyckas returnerar jag bara det inkommande värdet; Annars filtrerar jag data och returnerar resultatet av den operationen.

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