Execute add_action hook if condition
É 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
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:
- 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' );
- 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.