wordcamp porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a...

55
Este é o primeiro slide, tipicamente serve para ver se o projector está a funcionar e para eu ter a certeza que estamos no início da apresentação e não algures no meio, porque é um pincel mostrar um slide do meio numa sala cheira de gente e andar feito parvo à procura do primeiro. Podia ter criado um slide todo preto? Sim, podia, mas não era a mesma coisa.

Upload: others

Post on 11-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Este é o primeiro slide, tipicamente serve para ver se o projector está a funcionar e para eu ter a certeza que estamos no início da apresentação e não algures no meio, porque é um pincel mostrar um slide do meio numa sala cheira de gente e andar feito parvo à procura do primeiro. Podia ter criado um slide todo preto? Sim, podia, mas não era a mesma coisa.

Page 2: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

HOOKSFor fun and profit

Page 3: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

@zedejose

Page 4: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

HOOKSWas ist das?

Page 5: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

ÚQUESLet’s look at the trailer

Page 6: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

“pontos de saída” (opcionais) que alteram o comportamento ou

resultado de outra função.

Page 7: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

estão disponíveis no core do WordPress, em plugins e temas existentes ou no nosso próprio

código.

Page 8: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

input

resultado

REWIND

Page 9: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

if ( have_posts() ) : while ( have_posts() ) : the_post(); the_title();

endwhile; endif;

Page 10: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

function the_title (…) {

$title = get_the_title();

// etc…

if ( $echo ) echo $title;

else return $title;

}

/wp-includes/post-template.php

Page 11: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

function get_the_title( $post = 0 ) {

// a bunch of stuff…

return $title;

}

$post

$title

EXEMPLO NO WORDPRESS

Page 12: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

<

function get_the_title( $post = 0 ) {

// a bunch of stuff…

return apply_filters( 'the_title', $title, $id );

}

$post

$title

NO WORDPRESS, COM HOOK

Page 13: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

“aplica os filtros que foram definidos noutro sítio do

código (core, tema ou plugins)”

apply_filters

Page 14: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

filtro_do_titulo( … )

$title (modificado)

Page 15: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

filtro_do_titulo_2( … )

$title (modificado)

filtro_do_titulo_1( … )

filtro_do_titulo_3( … )

Page 16: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Tipos de Hooks

Filtros &

Acções(aqui é sem AO90)

Page 17: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Filtrosdevolvem uma versão modificada do resultado de uma função

são definidos com apply_filters(), executados com add_filter()

Acçõesmodificam parâmetros ou variáveis globais

são definidas com do_action(), executadas com add_action()

Page 18: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Anatomia de um filtro

return apply_filters( 'the_title', $title, $id );

add_filter( 'the_title', 'filtro_do_titulo', 10, 2 );

um novo filtro

Page 19: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Anatomia de um filtro

return apply_filters( 'the_title', $title, $id );

add_filter( 'the_title', 'filtro_do_titulo', 10, 2 );

a minha função

prioridade

respeitando a definição

Page 20: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Anatomia de um filtroo que é a “prioridade”?

Define a prioridade de execução de um filtro (10 por omissão)

Valores mais pequenos indicam maior prioridade.

Page 21: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Anatomia de um filtro

// Cria o filtro e indica a função. add_filter( 'the_title', 'ze_filtro_do_titulo', 10, 2 );

// Modifica o título, cada palavra começa com uma maiúscula. function ze_filtro_do_titulo( $title, $id ) {

$novo_titulo = ucwords( $title ); return $novo_titulo;

}

a função

Page 22: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Anatomia de um filtrouma única função do core !== um único filtro

get_the_title, por exemplo, aplica dois filtros:

protected_title_format e

the_title

Page 23: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Anatomia de uma acção

do_action( 'pre_get_posts', $query );

add_action( 'pre_get_posts', 'ze_muda_query', 10, 1 );

semelhante a um filtro

ou add_action( 'pre_get_posts', 'ze_muda_query' );

Page 24: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Anatomia de uma acção

// Cria a acção e indica a função. add_action( 'pre_get_posts', 'ze_muda_query' );

// Modifica a query. function ze_muda_query( $query ) {

$query->set( 'post_type', array( 'post', 'products' ) ); // Não tem return.

}

não devolve valores, altera qualquer coisa

Page 25: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

T.P.C.Preparar um Dry Martini* e ler a documentação sobre:

has_filter() current_filter() remove_filter() remove_all_filters()

has_action() do_action_ref_array() did_action() remove_action() remove_all_actions()

* http://bit.ly/TheOneDryMartini

Page 26: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

?RESPIRAR

https://codex.wordpress.org/Plugin_API/Hooks

Page 27: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

HOOKSthe funky stuff

Page 28: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Quem nunca?

add_action( 'wp_enqueue_scripts', 'mete_la_o_css' );

add_action( 'wp_enqueue_scripts', 'mete_la_o_javascript' );

Page 29: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

pre_get_postssuperpoderes

Modifica qualquer um das dezenas de parâmetros de

WP_Query

https://codex.wordpress.org/Class_Reference/WP_Query

Page 30: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

“WP_Query is a class that deals with the intricacies of a post's (or page's) request to a WordPress blog. The wp-blog-header.php (or the WP class in Version 2.0) gives the $wp_query object information defining the current request, and then $wp_query determines what type of query it's dealing with (possibly a category archive, dated archive, feed, or search), and fetches the requested posts.”

WP_Query

https://codex.wordpress.org/Class_Reference/WP_Query

Page 31: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?
Page 32: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?
Page 33: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?
Page 34: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?
Page 35: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?
Page 36: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?
Page 37: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?
Page 38: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

https://gist.github.com/luetkemj/2023628

Page 39: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

// Cria a acção e indica a função. add_action( 'pre_get_posts', 'inclui_bolos_no_loop' );

// Modifica a query. function inclui_bolos_no_loop( $query ) {

if ( $query->is_main_query() && ! is_admin() { $query->set( 'post_type', array( 'post', ‘bolo' ) );

}

}

Eu é mais bolos

Page 40: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

// Cria a acção e indica a função. add_action( 'pre_get_posts', 'exclui_categoria_3' );

// Modifica a query. function exclui_categoria_3( $query ) {

if ( $query->is_main_query() && ! is_admin() { $query->set( 'category__not_in', array( 3 ) );

}

}

Excluir uma categoria

Page 41: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

! is_admin()

Page 42: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?
Page 43: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

http://rachievee.com/the-wordpress-hooks-firing-sequence/

Cuidado com a sequência

Page 44: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

HOOKSNão é só o core

Page 45: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?
Page 46: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

HOOKSE eu e eu e eu e eu?

Page 47: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Hooks no meu códigoporquê?

Porque, por muito que queiras, o teu código nunca vai fazer exactamente aquilo que uma instalação específica pede.

E muito menos aquilo que todas as instalações específicas, que usam o teu código, pedem.

Page 48: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Hooks no meu códigocomo?

do_action( 'ze__a_minha_accao', $argumentos );

$variavel = apply_filters( 'ze__o_meu_filtro', $variavel ); ou

return apply_filters( 'ze__o_meu_filtro', $variavel );

Page 49: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Hooks no meu códigonão esquecer

return apply_filters( 'the_title', $title, $id );

add_filter( 'the_title', 'filtro_do_titulo', 10, 2 );

a minha função

prioridade

Page 50: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Hooks no meu código

• Extensível

• Flexível

• Elegante

• Developer friendly: reduz a quantidade de código(é o developer quem decide o que juntar)

• Gluten-free?

Page 51: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Hooks no meu códigoexemplo

<footer>     <?php do_action( 'ze_antes_do_footer' ); ?>     <!-- coisas no footer do tema. cenas e tal -->     <?php do_action( 'ze_depois_do_footer' ); ?> </footer>

Page 52: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

Hooks no meu códigoexemplo

function ze_imagem_do_post() {

// Só dento do loop, fáxavor. if ( has_post_thumbnail() ) {

$thumbnail = get_the_post_thumbnail();   return apply_filters( 'ze_filtro_imagem_do_post', $thumbnail );

}

}

o developer pode agora “mexer” nisto

Page 53: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?
Page 54: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

?

Page 55: WordCamp Porto 2018 · add_filter( 'the_title', 'filtro_do_titulo', 10, 2 ); a minha função prioridade respeitando a definição. Anatomia de um filtro o que é a “prioridade”?

@zedejose

Obrigado