Como obter o nome atual da Página no WordPress?

que código php pode ser usado para recuperar o nome actual da página num tema WordPress?

todas as soluções que vi até agora (the_title(), get_page()->post_name, get_post(), etc) não trabalhar para uma página que contém entradas post. Todos eles vão devolver o nome da última entrada no blog.

declarou outra maneira, assumir que você tem uma página criada no WordPress com o nome "Minha Notícia". Esta página é definida como a"página post". Adicione alguns posts à página. Agora, o que API pode ser usado para recuperar o string "my-news" em vez do nome do último post?

Editar:

Encontrei a seguinte variável que parece funcionar.

$wp_query->queried_object->post_name

esta é na verdade a versão amiga da URL do nome da página (slug), que é o que eu estava procurando também. Este foi testado com o modelo padrão (twentyten). Eu realmente não tenho certeza por que as duas variáveis dadas abaixo não funcionam no meu site. Obrigado pela dica.

Porque é que esta informação está tão escondida? para baixo?

Author: ivan_pozdeev, 2011-01-29

18 answers

A variável WP global $pagename deve estar disponível para si, acabei de tentar com a mesma configuração que indicou.

$pagename está definido no ficheiro wp-includes/theme.php, dentro da função get_page_template(), que é naturalmente chamado antes de seus arquivos de tema de página são processados, então ele está disponível em qualquer ponto dentro de seus modelos de páginas.

Editar:

  • Embora não pareça estar documentado, o $pagename var só está definido se usar permalinks. I acho que isto é porque se você não usá-los, WP não precisa da lesma da página, então não configura-lo.

  • $pagename não está definido se você usar a página como uma primeira página estática.

  • Este é o código dentro /wp-includes / theme.php, que usa a solução que indicou quando $pagename não pode ser definida:

    $pagename = get_query_var('pagename');  
    if ( !$pagename && $id > 0 ) {  
        // If a static page is set as the front page, $pagename will not be set. Retrieve it from the queried object  
        $post = $wp_query->get_queried_object();  
        $pagename = $post->post_name;  
    }
    
 162
Author: AJJ, 2015-04-06 14:12:40

A minha abordagem para obter o nome da lesma da Página

$slug = basename(get_permalink());
 31
Author: goksel, 2013-04-02 13:45:00

Ok, você deve pegar o título da página antes do loop.

$page_title = $wp_query->post->post_title;

Verifique a referência: http://codex.wordpress.org/Function_Reference/WP_Query#Properties.

Faça um

print_r($wp_query)

Antes do ciclo para ver todos os valores do objecto $wp_ query

 21
Author: keatch, 2011-01-29 15:09:59
<?php wp_title(''); ?>

Isto funcionou para mim, se eu entendi corretamente, você quer obter o nome da página em uma página que tem entradas post?

 16
Author: GregB, 2011-03-10 17:24:54

Poderá obter a página actual, a publicação ou o tipo de publicação personalizado com a variável global $post.

echo $post->post_title

Nota: numa função ou classe terá de especificar global $post; Antes de tentar utilizar $post.

Se tiver loops na sua página, certifique-se que termina cada loop com wp_reset_postdata(); para repor a $post no item por omissão que está a ser apresentado (a página).

Nota, a variável' post_title ' também está disponível para qualquer loop / consulta personalizada.. incluindo os itens do menu e os suportes anexo.. tudo no WordPress é um 'post'.

 7
Author: James, 2012-03-09 02:46:23

Se você está olhando para acessar a página atual de dentro de suas funções.php file (so, before the loop, before $post is populated, before $wp_query is initialized, 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 do texto da consulta.

$page_slug = trim( $_SERVER["REQUEST_URI"] , '/' )
Note que esta é uma solução "burra". Não sabe, por exemplo, que a página com o slug 'coming-soon' também é p=6. E assume que o teu permalink as configurações são definidas em pagename (que devem ser de qualquer forma!). Ainda assim, pode ser um truque útil se tiver um cenário controlado. Estou a usar isto numa situação em que desejo redireccionar os visitantes não registados para uma página "em breve"; mas tenho de ter a certeza de que não os estou a atirar para o temido "redirect loop", por isso preciso de excluir a página" em breve " desta regra:
global $pagenow;
if (
        ! is_admin() &&
        'wp-login.php' != $pagenow &&
        'coming-soon' != trim( $_SERVER["REQUEST_URI"] , '/' ) &&
        ! is_user_logged_in()
){
   wp_safe_redirect( 'coming-soon' );
}
 6
Author: Tom Auger, 2013-04-04 20:57:31

Tenta isto:

$pagename = get_query_var('pagename');
 5
Author: Mohammad Sabbagh, 2012-09-10 11:27:17
Arranjei uma solução mais simples.

Obter o valor devolvido do nome da página do wp_title (), se estiver em branco, imprimir o nome da página inicial, caso contrário echo wp_title value.

<?php $title = wp_title('',false); ?>

Lembre-se de remover a separação com o primeiro arg e, em seguida, definir o display como false para usar como uma entrada para a variável. em seguida, apenas bung o código entre o seu título etc. etiqueta.

<?php if ( $title == "" ) : echo "Home"; else : echo $title; endif; ?>

Trabalhou um tratamento para mim e garantir que o primeiro é declarado na secção onde você deseja extrair o $ title, este pode ser ajustado para retornar variáveis diferentes.

[email protected]

 5
Author: Tech1337, 2013-09-09 02:42:46

Eu acredito que o tema inicial do Roots tem uma função fantástica para obter o título da página actual, muito acessível, cobre todas as bases e pode ser facilmente usado com o gancho wp_title

Https://github.com/roots/roots/blob/6.5.0/lib/titles.php.

/**
 * Page titles
 */
function roots_title() {
  if (is_home()) {
    if (get_option('page_for_posts', true)) {
      echo get_the_title(get_option('page_for_posts', true));
    } else {
      _e('Latest Posts', 'roots');
    }
  } elseif (is_archive()) {
    $term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
    if ($term) {
      echo $term->name;
    } elseif (is_post_type_archive()) {
      echo get_queried_object()->labels->name;
    } elseif (is_day()) {
      printf(__('Daily Archives: %s', 'roots'), get_the_date());
    } elseif (is_month()) {
      printf(__('Monthly Archives: %s', 'roots'), get_the_date('F Y'));
    } elseif (is_year()) {
      printf(__('Yearly Archives: %s', 'roots'), get_the_date('Y'));
    } elseif (is_author()) {
      $author = get_queried_object();
      printf(__('Author Archives: %s', 'roots'), $author->display_name);
    } else {
      single_cat_title();
    }
  } elseif (is_search()) {
    printf(__('Search Results for %s', 'roots'), get_search_query());
  } elseif (is_404()) {
    _e('Not Found', 'roots');
  } else {
    the_title();
  }
}
 5
Author: Sy Holloway, 2014-02-27 13:06:08
Só precisamos de usar a variável" post " global.
global $post;
echo $post->post_title;

Isto fará eco do título actual da Página/post.

Espero que isto ajude!!!!
 5
Author: Rahul Balakrishna, 2014-05-22 13:22:09

    $title = get_the_title($post); 
    $parent_title = get_the_title($post->post_parent);

    echo $title;
    echo $parent_title;

Espero que isto ajude !! ;)
 4
Author: Jerad Rutnam, 2011-10-27 18:40:25

Em Circuito Fechado

<pre>
if ( have_posts() ) : while ( have_posts() ) : the_post();
/******************************************/
echo get_the_title();
/******************************************/
endwhile; endif;
</pre>

Isto mostrar-lhe-á o título da página actual. Para efeitos de renovação http://codex.wordpress.org/Function_Reference/get_the_title

 2
Author: Umair Hamid, 2013-12-19 08:03:41
Sei que isto é antigo, mas deparei-me com isto e o que parece ser mais fácil é usar isto.
<?php single_post_title(); ?>
 2
Author: Bowenac, 2014-01-29 22:47:43

Uma opção, se está à procura da página pesquisada actual, em vez do ID da página ou do slug, é interceptar a Pesquisa:

add_action('parse_request', 'show_query', 10, 1);

Dentro da sua função, tem acesso ao objecto $wp e pode obter o nome do pagename ou o nome do post com:

function show_query($wp){
     if ( ! is_admin() ){ // heck we don't need the admin pages
         echo $wp->query_vars['pagename'];
         echo $wp->query_vars['name'];
     }
}

Se, por outro lado, você realmente precisa dos dados do post, o primeiro lugar para obtê-los (e indiscutivelmente neste contexto, o melhor) é:

add_action('wp', 'show_page_name', 10, 1);

function show_page_name($wp){
     if ( ! is_admin() ){
        global $post;
        echo $post->ID, " : ", $post->post_name;
     }
}
Finalmente, percebi que esta provavelmente não era a pergunta da operação, mas se ... à procura do nome da Página Admin, use o global $pagenow.
 1
Author: Tom Auger, 2013-07-26 14:20:35
Aqui está a minha versão:
$title =ucwords(str_replace('-', ' ', get_query_var('pagename')));

Get_query_var('pagename') estava a dar-me o slug da página. Então o acima substitui todos os traços, e faz a primeira letra de cada palavra em maiúsculas - para que possa realmente ser usado como um título.

 1
Author: gray, 2014-02-07 16:18:46

Mostra o título antes do ciclo começar:

$page_title = $wp_query->post->post_title;

Obrigado

 1
Author: Ajay Malhotra, 2017-05-24 05:54:29

Encontrei agora em {[0] } Esta função:

obter consultado http://codex.wordpress.org/Function_Reference/wp_list_pages

Que é uma embalagem para $wp_query->get_queried_object. Este post me colocou na direção certa, mas parece que precisa desta atualização.

 0
Author: Sandra, 2012-10-21 20:06:18

Isto também funciona se estiver nas funções.pai. Não é a melhor abordagem, uma vez que você tem que usar a matriz global, mas funciona.

Primeiro, temos de adicionar um filtro. Deve existir um filtro melhor para usar do que o template_include, mas eu não conheço todos eles. Por favor, aponta-me para a certa.
add_filter( 'template_include', 'var_template_include', 1000 );
function var_template_include( $template ){
    global $wp_query;
    $GLOBALS['current_page'] = $wp_query->get_queried_object()->post_name;
    return $template;
}

2 - Evite a utilização directa da variável

function get_current_page( $echo =  false ) {
    if( !isset( $GLOBALS['current_page'] ) )
        return false;
    return $GLOBALS['current_page'];
}

3-Agora você pode usar a função get_current_page() em qualquer outra parte das funções.pai.

 0
Author: toto_tico, 2013-06-21 06:53:22