Qual código PHP pode ser usado para recuperar o nome da página atual em um tema WordPress?
Todas as soluções que eu vi até agora ( the_title()
, get_page()->post_name
, get_post()
, etc.) não funcionam para uma página que contém entradas de correio. Todos retornarão o nome da última entrada do blog.
Em outras palavras, suponha que você tenha uma página criada no WordPress com o nome "Minhas Notícias". Esta página está definida como a "página de postagem". Adicione algumas postagens à página. Agora, qual API pode ser usada para recuperar a sequência "my-news" em vez do nome da última postagem?
Eu encontrei a seguinte variável que parece funcionar.
$wp_query->queried_object->post_name
Esta é realmente a versão amigável para URL do nome da página (slug), que era o que eu estava procurando também. Isso foi testado com o modelo padrão ( vinte e dez ). Eu realmente não sei por que as duas variáveis fornecidas abaixo não funcionam no meu site. Obrigado ao keatch pela print_r()
dica .
Agora, por que essa informação está escondida tão profundamente?
fonte
Respostas:
A variável global do WordPress
$pagename
deve estar disponível para você. Eu apenas tentei com a mesma configuração que você especificou.$pagename
é definido no arquivo wp-includes / theme.php, dentro da funçãoget_page_template()
, que é chamada naturalmente antes que os arquivos de tema da página sejam analisados, para que esteja disponível em qualquer ponto dos modelos para páginas.Embora pareça não estar documentado, o
$pagename
var é definido apenas se você usar permalinks. Eu acho que isso ocorre porque, se você não usá-los, o WordPress não precisa da lesma de página, por isso não a configura.$pagename
não está definido se você usar a página como uma página inicial estática.Este é o código dentro de /wp-includes/theme.php, que usa a solução que você apontou quando
$pagename
não pode ser definida:$ pagename = get_query_var ('pagename'); if (! $ pagename && $ id> 0) {// Se uma página estática for definida como primeira página, $ pagename não será definido. Recupere-o do objeto consultado $ post = $ wp_query-> get_queried_object (); $ pagename = $ post-> post_name; }
fonte
$pagename = $wp_query->queried_object->post_name;
apenas não esqueça de definirglobal $wp_query;
antes!Minha abordagem para obter o nome do slug da página:
fonte
Ok, você deve pegar o título da página antes do loop.
Verifique a referência: http://codex.wordpress.org/Function_Reference/WP_Query#Properties .
Faça um
antes do loop para ver todos os valores do
$wp_query
objeto.fonte
Isso funcionou para mim.
Se bem entendi, você deseja obter o nome da página em uma página que possui entradas de postagem.
fonte
Você pode obter a página atual, postagem ou tipo de postagem personalizado com a variável global
$post
:Nota: Em uma função ou classe, você precisará especificar
global $post;
antes de tentar usar$post
.Se você tiver loops em sua página, termine cada loop com
wp_reset_postdata();
para$post
voltar ao item padrão que está sendo exibido (a página).Observe que a variável 'post_title' também está disponível para qualquer loop / consulta personalizada ... incluindo itens de menu e anexos de mídia ... tudo no WordPress é uma 'publicação'.
fonte
Se você deseja acessar a página atual de dentro do seu arquivo functions.php (então, antes do loop, antes de
$post
ser preenchido, antes de$wp_query
ser inicializado, etc ...), você realmente não tem escolha a não ser acessar as próprias variáveis do servidor e extrair a página solicitada da string de consulta.Observe que esta é uma solução "burra". Não sabe, por exemplo, que a página com a lesma 'em breve' também é
p=6
. E assume que suas configurações de permalink estão definidas comopagename
(que deveriam ser de qualquer maneira!).Ainda assim, pode ser um pequeno truque útil se você tiver um cenário controlado. Estou usando isso em uma situação em que desejo redirecionar visitantes não logados para uma página "em breve"; mas tenho que ter certeza de que não estou jogando-os no temido "loop de redirecionamento"; portanto, preciso excluir a página "em breve" desta regra:
fonte
Acredito que o tema inicial do Roots tem uma função fantástica para obter o título da página atual. É muito hacker, cobre todas as bases e pode ser facilmente usado com o
wp_title
gancho.fonte
Tente o seguinte:
fonte
Eu vim com uma solução mais simples.
Obtenha o valor retornado do nome da página em wp_title (). Se estiver vazio, imprima o nome da página inicial, caso contrário, ecoe o valor wp_title ().
Lembre-se de remover a separação com o primeiro argumento e defina display como false para usar como uma entrada para a variável. Em seguida, basta colocar o código entre o cabeçalho, etc.
Isso funcionou para mim e, garantindo que o primeiro seja declarado na seção em que você deseja extrair
$title
, isso pode ser ajustado para retornar variáveis diferentes.fonte
Nós só precisamos usar a variável global "post":
Isso ecoará o título da página / postagem atual.
fonte
Usar:
fonte
Parece ser o mais fácil de usar:
fonte
Mostre o título antes do início do loop:
fonte
Uma opção, se você estiver procurando pela página consultada real, em vez do ID da página ou slug, é interceptar a consulta:
Na sua função, você tem acesso ao objeto $ wp e pode obter o nome da página ou o nome da postagem com:
Se, por outro lado, você realmente precisa dos dados da postagem, o primeiro local para obtê-los (e sem dúvida nesse contexto, o melhor) é:
Por fim, percebo que essa provavelmente não foi a pergunta do OP, mas se você estiver procurando o nome da página Admin , use o global
$pagenow
.fonte
Dentro do loop do WordPress :
Isso mostrará o título da página atual.
Para referência: get_the_title ()
fonte
Aqui está a minha versão:
get_query_var ('pagename') estava apenas me dando a página lesma. Portanto, o texto acima substitui todos os traços e coloca a primeira letra de cada palavra em maiúscula - para que possa realmente ser usada como título.
fonte
Foi isso que acabei usando a partir de 2018:
fonte
Agora encontrei essa função no WordPress Codec ,
ser consultado
que é um invólucro para
$wp_query->get_queried_object
.Este post me colocou na direção certa, mas parece que precisa dessa atualização.
fonte
Isso também funciona se você estiver no functions.php. Não é a melhor abordagem, pois você precisa usar a matriz global, mas funciona.
Primeiro, precisamos adicionar um filtro. Deve haver um filtro melhor para usar do que o template_include, mas eu não conheço todos eles. Por favor, aponte-me para o caminho certo.
Evite usar a variável diretamente
Agora você pode usar a função
get_current_page()
em qualquer outra parte do functions.php.fonte