Execute add_action hook if condition

Sep 11 2020

É possível funcionar add_actionsob uma determinada condição?

Por exemplo, digamos que eu queira ecoar "Olá" no cabeçalho da página inicial e usar a mesma função, mas ecoar "Olá" no rodapé da página de arquivo.

function say_hello() {
    echo '<p>Hello!</p>';
}

// Echo in wp_head on the front page
if ( is_front_page() ) {
    add_action('wp_head', 'say_hello');
}

// Echo in wp_footer on the archive
if ( is_archive() ) {
    add_action('wp_footer', 'say_hello');
}

O acima não funciona, alguma ideia?

Respostas

1 Rup Sep 10 2020 at 23:39

Eu acho que este código está sendo executado diretamente do functions.php do seu plugin, o que significa que você está avaliando is_front_page()e is_archive()enquanto carrega o plugin. Isso é muito cedo - isso é antes de o estado suficiente ter sido inicializado para saber em qual página você está.

Para corrigir isso, você precisa:

  1. mova a lógica para suas funções say_hello e verifique is_front_page ou is_archive no ponto em que você está renderizando o cabeçalho ou rodapé:
function say_hello_in_header() {
    // Echo in wp_head on the front page
    if ( is_front_page() ) {
        echo '<p>Hello!</p>';
    }
}
add_action( 'wp_head', 'say_hello_in_header' );

function say_hello_in_footer() {
    // Echo in wp_footer on the archive
    if ( is_archive() ) {
        echo '<p>Hello!</p>';
    }
}
add_action( 'wp_footer', 'say_hello_in_footer' );
  1. ou escolha uma ação para ligar depois de todo o estado ter sido configurado, mas antes do cabeçalho e rodapé terem sido renderizados, por exemplo, wp_enqueue_scripts, e realizar os testes e as ações de cabeçalho e rodapé lá:
function enqueue_say_hellos() {
    // Echo in wp_head on the front page
    if ( is_front_page() ) {
        add_action( 'wp_head', 'say_hello' );
    }

    // Echo in wp_footer on the archive
    if ( is_archive() ) {
        add_action( 'wp_footer', 'say_hello' );
    }
}
add_action( 'wp_enqueue_scripts', 'enqueue_say_hellos' );

Dito isso, observe que wp_head não é o local correto para adicionar HTML à página, pois ele é executado a partir da tag <head> da página e não da tag <body>. Qualquer conteúdo que você adicionar aparecerá no lugar errado, se for o caso. Se você quiser modificar o cabeçalho da sua página, terá que editar o seu modelo ou encontrar algum outro mecanismo.