mau funcionamento de is_front_page ()?


8

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 pagedefinido 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 à $classesmatriz, 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-pageclasse ao bodymesmo na wp-signup.phppá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.phpqualificada como a página (ID) retornada por get_option('page_on_front')( que retorna IDa 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.phpcaso, 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.phpe levanta as seguintes perguntas.

  • Por que is_front_page()está retornando resultados errados?
  • O AFAIK wp-signup.phpnunca 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 marcando PHP_SELFou REQUEST_URI?
  • Por que o WP_Query tem uma página inicial atual $this->postneste momento?

Eu descartei o problema do plug - in removendo o diretório plugins (e mu-plugins). Ainda se qualifica wp-signup.phpcomo 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.


Você definitivamente está usando a versão mais recente do WordPress? E essa é uma configuração multisite?
TheDeadMedic

Estou usando a versão 4.2.4 e sim, é uma configuração multisite. Adicionado à pergunta.
Ejaz

Isso é ... estranho. Tudo o que posso sugerir para agora está usando a seguinte ifcondição:( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )
TheDeadMedic

Obrigado pela sugestão @TheDeadMedic, que fará isso. Então a questão é um bug do WP então?
Ejaz

Eu já ouvi falar disso antes na WPMU. Tente desativar o seu tema e reativá-lo.
Matt van Andel

Respostas:


1

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:

add_filter('body_class', 'ejay_add_home_class');

function ejay_add_home_class($classes) {

    if (is_front_page() || is_home()) {

        $classes[] = 'home-page';
    }

    return $classes;
} 

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.


-4

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:

<?php if (is_front_page()){ ?>
<p>Home Page</p>
<?php else { ?>
<p>Not Home Page</p>
<?php } ?>
?>

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.


Obrigado pela resposta, mas não estou conseguindo ver como isso afeta os valores retornados pelas funções mencionadas acima.
Ejaz

5
PARE DE SPAMMING !!!! . Seus links são inúteis para o seu próprio site. Suas próximas postagens serão sinalizadas como spam. Obrigado
Pieter Goosen

Isso também nem sequer responder à pergunta em questão
Pieter Goosen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.