Não lhe parece que alguns WordPress plugins são sortudos? WooCommerce, Fácil Digit Baixar, Formas de gravidade : cada um desses plug-ins é desenvolvido por uma empresa inteira, com dezenas de extensões de terceiros e mais e mais recursos adicionados por eles que aumentam o potencial do plug-in. Durante esse tempo, a maioria dos outros plug-ins não progride.

Como um único plug-in pode se tornar a base de um ecossistema de tecnologia próspero? Há muitas respostas: ser o primeiro a chegar ao mercado, criar um ótimo produto, experiência em marketing e tudo mais. Mas hoje vamos nos concentrar em uma parte importante da resposta técnica, a saber: extensibilidade, por meio do sistema de gancho WordPress.

Hoje vamos usar um exemplo de WordPress Plugin para cobrir as duas funções principais que conferem status de extensibilidade a um plugin, a saber: apply_filters() e do_action().

Extensões: Extensões para plugins

Portanto, é claro que quando falamos em "extensões", estamos nos referindo a plug-ins que são feitos para terceiros. Vejamos um exemplo: " Listra para WooCommerce ".

Esta extensão não faz nada se você ainda não tiver WooCommerce. Se você instalar WooCommerce, então compre e instale " Listra para WooCommerce Como um plug-in separado, ele expandirá a funcionalidade do WooCommerce, para que você possa começar a aceitar pagamentos através do gateway de pagamento Stripe.

Então você tem um plugin que melhora outro plugin de uma maneira específica. É uma extensão. Esses são advérbios do ecossistema WordPress.

Como funcionam as funções: apply_filters () e do_action ()?

A próxima pergunta: como o WooCommerce vê sua funcionalidade estendida? Afinal, é fácil imaginar escrever um plugin de comércio eletrônico que “ só funciona com alguns gateways de pagamento ". Então, se você realmente deseja Stripe, terá que modificar completamente o WooCommerce e provavelmente criará sua própria ferramenta chamada StripeCommerce, que se torna um concorrente do WooCommerce ou simplesmente vive no site de um de seus clientes que pode pagar assistência personalizada.

É uma bagunça para contemplar, mas felizmente o WooCommerce está fazendo algo muito melhor. Ele utiliza duas funções: apply_filters () e do_action (). Essas duas funções permitem criar colchetes no WordPress, e essa é uma parte fundamental do sistema WordPress Hooks em geral.

apply_filters () e do_action () Uma diferença bastante simples:

  • apply_filters () permite conectar filtros a funções.
  • do_action () permite conectar ações a funções.

Vejamos um exemplo para ver como eles funcionam.

Exemplo de uso dos ganchos WooPress.

Para nosso exemplo, usaremos um plugin “Frase do Dia”, mais uma extensão que modifica este plugin de uma maneira específica. Para acompanhar e ver o código completo, baixe os plug-ins como um arquivo ZIP https://wpshout.com/media/2016/10/plugins.zip.

O plugin originais

Este plugin usa a API exposta por uma biblioteca de cotações externa e armazena a cotação resultante como dados transitórios do WordPress que são atualizados a cada 24 horas. Volte a este artigo a qualquer momento e você verá uma citação aleatória deste dia sobre o tópico "vida", que deve ser ampla o suficiente.

extensão de plugin

Como sabemos, o problema com a maioria das citações é que elas não são ditas por "Carl Sagan". Nossa extensão corrige esse problema, usando uma série de ferramentas:

  • Um grande cabeçalho mostrando a data de hoje e que a citação é de Carl Sagan,
  • Algumas substituições específicas de palavras para transformar uma citação no que Carl Sagan poderia ter dito
  • Os autores das citações originais são alterados e as citações agora são atribuídas corretamente a Carl Sagan.

Aqui está o plug-in e a extensão em ação:

citação em ação

código de Le

Para que isso ocorra, são necessárias duas etapas:

O plugin original define ganchos - ganchos de ação e ganchos de filtro - permitindo que o código externo modifique ou adicione seu próprio código em pontos-chave. O plugin usa apply_filters () e do_action () para conseguir isso.

A extensão define funções de gancho na ação e filtros - que modificam o plugin original de uma maneira necessária.

Código da chave no plug-in original

A parte mais importante do código para nós é o que fazemos depois de obter nossos dados da API. Esses dados estão disponíveis como uma matriz com dois elementos: texto: o texto da citação; e autor: a pessoa que fez a citação. Nosso código, portanto, será semelhante a este:

add_shortcode ('extensible_plugin_demo', 'bpc_output_extensible_plugin'); função bpc_output_extensible_plugin () {ob_start (); // Enganche antes de exibir! do_action ('bpc_before_get_qod_text'); $ qod_data = bpc_get_qod_data (); if (is_array ($ qod_data)) {echo ' '; $ qod_text = $ qod_data ['texto']; $ qod_author = $ qod_data ['autor']; // Filtre o conteúdo! $ qod_text = apply_filters ('bpc_qod_text', $ qod_text); $ qod_author = apply_filters ('bpc_qod_author', $ qod_author); echo $ qod_text; eco ' '; echo $ qod_author; eco ' '; } // Gancho de ação após o resto da saída! do_action ('bpc_after_get_qod_text'); return ob_get_clean (); }

Código da chave na extensão

O plugin não consiste em nada além de ações e filtros para modificar o plugin original. Aqui está o código da extensão:

add_filter( 'bpc_qod_text', 'bpc_filter_qod_text' );
// Filter: remplacer des mots spécifique
function bpc_filter_qod_text( $text ) {
    $text = str_replace( 
        array( ' I ', ' me ', ' the ', ' is ', ' am ', ' are ' ),
        array( ' I, a descendent of savannah-dwelling hominids that somehow evolved an astounding capacity for self-reflection, ', ' the cooled-off stellar matter I call "me" ', ' the trillions of atoms that make up the ', ' seems, without the mind-boggling perspective of quantum physics, to be ', ' cannot, due to the Heisenberg Uncertainty Principle, be determined not to be ', ' appear to our best scientific instruments to be ' ),
        $text
    );
    return $text;
}

// Filter: barré le texte qui précède le nom de l'auteur et ajouter Carl Sagan à la suite
add_filter( 'bpc_qod_author', 'wpshout_filter_qod_author' );
function wpshout_filter_qod_author( $text ) {
    $text = '<strike>' . $text . '</strike> Carl Sagan';
    return $text;
}

// Action: Ajouter un titre
add_action( 'bpc_before_get_qod_text', 'bpc_set_up_quote' );
function wpshout_set_up_quote() {
    echo '<h4>Carl Sagan Quote of the Day for ' . date( 'F j, Y') . ':</h4>';
}

// Action: Ajouter une image
add_action( 'bpc_after_get_qod_text', 'bpc_add_carl_boom' );
function bpc_add_carl_boom() {

    echo '<div><img class="aligncenter" src="' . plugin_dir_url( __FILE__ ) . 'carl_sagan_mind_blown.gif"></div>';
}

Como você pode ver, esses são usos bastante padrão de " Add_action () "E" add_filter () "E ambas as funções estão entre colchetes que chamamos de" bpc_qod_text ".

O resultado final é que nosso plug-in agora é extensível: um segundo desenvolvedor pode assistir a modificar o plug-in e dizer "Desejo Carl Sagan diz », E faça isso usando o plugin original como base, um pouco como temas pai e filho no WordPress.

Esse é um truque que torna um plugin como o WooCommerce muito popular, permitindo adicionar novos recursos.

É isso neste tutorial. Espero que você entenda melhor os diferentes casos de uso de filtros e ações do WordPress.