Eu tenho um problema bastante básico que me surpreende que o WP não tenha uma solução nativa (a menos que eu esteja negligenciando alguma coisa, espero).
Eu tenho um site WP com static page
definido como primeira página na configuração de leitura. Em um código de plug-in, estou tentando determinar se o WP está exibindo a primeira página e adicionar uma classe à $classes
matriz, se for verdade. Estou usando o seguinte código para realizá-lo
add_filter('body_class', function($classes){
if(is_front_page() || is_home()){
$classes[] = 'home-page';
}
return $classes;
});
Estou usando os dois is_front_page()
e is_home()
, caso a configuração da primeira página mude da página estática para o layout do blog no futuro.
O problema que encontro é que esse código adiciona home-page
classe ao body
mesmo na wp-signup.php
página.
A inspeção do código revela as is_front_page()
chamadas WP_Query::is_front_page()
, que essencialmente retornam resultados de WP_Query::is_page(get_option('page_on_front'))
. Portanto, a raiz do problema é wp-signup.php
qualificada como a página (ID) retornada por get_option('page_on_front')
( que retorna ID
a página estática definida como primeira página em configurações> leitura ).
WP_Query::is_page()
usa WP_Query::get_queried_object()
internamente para decidir se a página atual é a página presente nos argumentos do método No wp-signup.php
caso, o código que define o objeto consultado atual é o seguinte
/*...other code... */
elseif ( $this->is_singular && ! empty( $this->post ) ) {
$this->queried_object = $this->post;
$this->queried_object_id = (int) $this->post->ID;
}
/*...other code... */
Isso mostra que o wordpress, por algum motivo, consulta a primeira página para exibir wp-signup.php
e levanta as seguintes perguntas.
- Por que
is_front_page()
está retornando resultados errados? - O AFAIK
wp-signup.php
nunca pode ser definido como home page usando a configuração de administrador do Wordpress; por que o código do wordpress não está sendo resgatado apenas marcandoPHP_SELF
ouREQUEST_URI
? - Por que o WP_Query tem uma página inicial atual
$this->post
neste momento?
Eu descartei o problema do plug - in removendo o diretório plugins (e mu-plugins). Ainda se qualifica wp-signup.php
como primeira página, onde não é para nenhuma outra página.
Qualquer ajuda sobre esse problema será muito apreciada.
Atualização
Estou usando o WP verison 4.2.4 e é uma configuração multisite.
Obrigado.
if
condição:( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )
Respostas:
Apenas especulação, mas gostaria de saber se você está enfrentando um problema de função anônima. Funções anônimas são permitidas no WP e geralmente funcionam bem (presumindo que o PHP seja atualizado), mas, se você pesquisar, encontrará relatórios de suspeitas de bugs ou, pelo menos, de comportamento inesperado.
Por falar nisso, não tenho certeza de ter visto uma função anônima usada como exemplo no Codex do WordPress, e não me lembro de ter encontrado uma antes no código de tema e plug-in. Claro, eu não estava de olho nas funções anon, mas, ainda assim, acho que a função acima quase sempre será escrita em alguma versão do formato de duas partes mais familiar - ou seja:
Assim, como um experimento, eu tentaria o formato mais "convencional" acima e também tentaria com uma prioridade designada maior ou menor que 10. Se anexar várias funções anônimas ao mesmo filtro, daria a elas prioridades diferentes, ou use uma matriz (exemplo: http://snippets.khromov.se/adding-multiple-actions-and-filters-using-anonymous-functions-in-wordpress/ ) ou escreva cada uma delas com o nome two- parters também.
Na verdade, acho a maneira em duas partes um pouco mais fácil de ler, acompanhar e ajustar de qualquer maneira.
fonte
O WordPress usa modelos diferentes para as páginas do seu site. Se você tiver um modelo page.php no seu tema, ele será usado para exibir suas páginas. Se você tiver um single.php, ele será usado para exibir suas postagens únicas. index.php ou home.php exibirá sua página inicial ou page.php se você tiver uma determinada página selecionada como a página inicial através das opções de leitura.
Portanto, sua declaração condicional:
Seria realmente útil apenas no arquivo header.php ou footer.php ou no page.php se você tiver uma determinada página selecionada nas opções de leitura.
fonte