Hoe kan ik de huidige pagina-naam krijgen in WordPress?

Welke PHP-code kan worden gebruikt om de huidige pagina-naam op te halen in een WordPress-thema?

Alle oplossingen die ik tot nu toe heb gezien (the_title(), get_page()->post_name, get_post(), enz .) Werk niet voor een pagina die postvermeldingen bevat. Ze zullen allemaal de naam van het nieuwste bloginvoer retourneren.

heeft een andere manier gesteld, neem aan dat u een pagina hebt die in WordPress is gemaakt met de naam “Mijn Nieuws”. Deze pagina is ingesteld als de “postpagina”. Voeg een paar berichten toe aan de pagina.
Nu, welke API kan worden gebruikt om de string “My-News” op te halen in plaats van de naam van de nieuwste post?


Ik heb de volgende variabele gevonden die lijkt te werken.

$wp_query->queried_object->post_name

Dit is eigenlijk de URL-vriendelijke versie van de paginanaam (slak), wat is waar ik ook naar op zoek was. Dit werd getest met de standaardsjabloon (twintig & nbsp; tien ). Ik weet het echt niet zeker waarom de twee hieronder gegeven variabelen niet op mijn site werken. Dank aan Keatch Voor de print_r()tip .

Nu, waarom is deze informatie zo diep verborgen?


1, Autoriteit 100%

De WordPress Global Variable $pagenamemoet voor u beschikbaar zijn. Ik heb net geprobeerd met dezelfde opstelling die je hebt opgegeven.

$pagenameis gedefinieerd in het bestand WP-Inclusief / Theme.php, in de functie get_page_template(), die natuurlijk vóór uw pagina-themabestanden wordt genoemd zijn geparseerd, dus het is op elk punt in uw sjablonen beschikbaar voor pagina’s.

  • Hoewel het niet gedocumenteerd lijkt te zijn, wordt de $pagenamevar alleen ingesteld als je permalinks gebruikt. Ik denk dat dit komt omdat als je ze niet gebruikt, WordPress de pagina-slug niet nodig heeft, dus het stelt het niet in.

  • $pagenameis niet ingesteld als je de pagina als statische voorpagina gebruikt.

  • Dit is de code in /wp-includes/theme.php, die de oplossing gebruikt die je hebt aangegeven wanneer $pagenameniet kan worden ingesteld:

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;
}

Antwoord 2, autoriteit 21%

Mijn aanpak om de slugnaam van de pagina te krijgen:

$slug = basename(get_permalink());

Antwoord 3, autoriteit 13%

<?php wp_title(''); ?>

Dit werkte voor mij.

Als ik het goed begrijp, wil je de paginanaam op een pagina met berichtitems.


Antwoord 4, autoriteit 12%

Ok, je moet de paginatitel vóórde lus pakken.

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

Controleer de referentie: http://codex.wordpress.org/Function_Reference/WP_Query# Eigenschappen.

Doe een

print_r($wp_query)

Vóór de lus om alle waarden van de $wp_queryObject te bekijken.


5, Autoriteit 5%

Als u op zoek bent naar de huidige pagina vanuit uw FunctionS.php-bestand (dus, vóór de lus, vóór $postbevolkt, vóór $wp_queryis geïnitialiseerd, enz …) Je hebt echt geen andere keuze, maar om toegang te krijgen tot de servervariabelen zelf en de gevraagde pagina uit de queryreeks uit te pakken.

$page_slug = trim( $_SERVER["REQUEST_URI"] , '/' )

Merk op dat dit een “domme” oplossing is. Het weet bijvoorbeeld niet, bijvoorbeeld dat de pagina met de Slug ‘COMMET-Soon’ ook p=6is. En het gaat ervan uit dat uw Permalink-instellingen zijn ingesteld op pagename(die hoe dan ook moeten zijn!).

Toch kan het een handig trucje zijn als je een gecontroleerd scenario hebt. Ik gebruik dit in een situatie waarin ik niet-ingelogde bezoekers wil omleiden naar een “binnenkort”-pagina; maar ik moet ervoor zorgen dat ik ze niet in de gevreesde “omleidingslus” gooi, dus ik moet de “binnenkort”-pagina uitsluiten van deze regel:

global $pagenow;
if (
        ! is_admin() &&
        'wp-login.php' != $pagenow &&
        'coming-soon' != trim( $_SERVER["REQUEST_URI"] , '/' ) &&
        ! is_user_logged_in()
){
   wp_safe_redirect( 'coming-soon' );
}

Antwoord 6, autoriteit 4%

Ik geloof dat het Roots-startthemaheeft een fantastische functie om de huidige paginatitel te krijgen. Het is zeer hackbaar, dekt alle bases en kan gemakkelijk worden gebruikt met de wp_titlehook.

/**
 * 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();
  }
}

Antwoord 7, autoriteit 4%

We hoeven alleen de globale variabele “post” te gebruiken:

global $post;
echo $post->post_title;

Dit is een echo van de huidige pagina-/posttitel.


Antwoord 8, autoriteit 3%

Probeer dit:

$pagename = get_query_var('pagename');

Antwoord 9, autoriteit 3%

Ik heb een eenvoudigere oplossing bedacht.

Verkrijg de geretourneerde waarde van de paginanaam van wp_title(). Indien leeg, druk de startpaginanaam af, en herhaal anders de wp_title() waarde.

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

Vergeet niet om de scheiding met het eerste argument te verwijderen en vervolgens display in te stellen op false om te gebruiken als invoer voor de variabele. Stop dan gewoon de code tussen je kopjes, etc. tags.

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

Het werkte een traktatie voor mij en ervoor te zorgen dat de eerste wordt gedeclareerd in de sectie waar je de $titlewilt extraheren, dit kan worden aangepast om verschillende variabelen te retourneren.


Antwoord 10, autoriteit 2%

Gebruik:

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

Antwoord 11, autoriteit 2%

Dit lijkt het gemakkelijkst te gebruiken:

<?php single_post_title(); ?>

Antwoord 12, autoriteit 2%

Toon de titel voordat de lus begint:

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

Antwoord 13

Eén optie, als u op zoek bent naar de daadwerkelijk opgevraagde pagina, in plaats van de pagina-ID of slug, is om de zoekopdracht te onderscheppen:

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

Binnen je functie heb je toegang tot het $wp-object en kun je de paginanaam of de berichtnaam krijgen met:

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'];
     }
}

Als je daarentegen de postgegevens echt nodig hebt, is de eerste plaats om deze te krijgen (en in deze context misschien wel de beste):

add_action('wp', 'show_page_name', 10, 1);
function show_page_name($wp){
     if ( ! is_admin() ){
        global $post;
        echo $post->ID, " : ", $post->post_name;
     }
}

Ten slotte realiseer ik me dat dit waarschijnlijk niet de vraag van de OP was, maar als je op zoek bent naar de naam van de Admin-pagina, gebruik dan de algemene $pagenow.


Antwoord 14

Binnen de WordPress Loop:

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

Hiermee wordt u de huidige paginatitel weergegeven.

Ter referentie: gett_the_title ()


15

Hier is mijn versie:

$title = ucwords(str_replace('-', ' ', get_query_var('pagename')));

Get_Query_var (‘PaginaName’) gaf me gewoon de paginaglug. Dus het bovenstaande vervangt alle streepjes en maakt de eerste letter van elk woord hoofdletters – dus het kan daadwerkelijk als titel worden gebruikt.


16

Dit is wat ik eindigde, vanaf 2018:

<section id="top-<?=(is_front_page() ? 'home' : basename(get_permalink()));?>">

17

Ik heb nu deze functie gevonden op WordPress-codec ,

WORDT ONTWERPEN

Wat is een wikkel voor $wp_query->get_queried_object.

Dit bericht zet me in de goede richting, maar het lijkt erop dat het deze update nodig heeft.


18

Dit werkt ook als u in de functies bent.PhP. Het is niet de beste aanpak omdat u de wereldwijde array moet gebruiken, maar het werkt.

  1. Eerst moeten we een filter toevoegen. Er moet een beter filter bestaan ​​om te gebruiken dan de template_include, maar ik weet ze niet allemaal. Wijzen me alsjeblieft naar de juiste.

    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. Vermijd het gebruik van de variabele direct

    function get_current_page( $echo =  false ) {
        if( !isset( $GLOBALS['current_page'] ) )
            return false;
        return $GLOBALS['current_page'];
    }
    
  3. Nu kunt u de functie get_current_page()in een ander deel van de functies.php gebruiken.

Other episodes