it-swarm.com.de

Wie bekomme ich den aktuellen Seitennamen in WordPress?

Welcher PHP-Code kann verwendet werden, um den aktuellen Seitennamen in einem WordPress-Design abzurufen?

Alle Lösungen, die ich bisher gesehen habe (the_title(), get_page()->post_name, get_post() usw.), funktionieren nicht für eine Seite, die Einträge enthält. Sie geben alle den Namen des neuesten Blogeintrags zurück.

Anders ausgedrückt: Nehmen Sie an, Sie haben eine in WordPress erstellte Seite mit dem Namen "My News" . Diese Seite wird als "Postseite" festgelegt. Fügen Sie der Seite ein paar Einträge hinzu ..__ Nun, mit welcher API kann die Zeichenfolge "my-news" anstelle des Namens des letzten Posts abgerufen werden?

Bearbeiten:

Ich habe die folgende Variable gefunden, die zu funktionieren scheint.

$wp_query->queried_object->post_name

Dies ist eigentlich die URL-freundliche Version des Seitennamens (Slug), nach der ich auch gesucht habe. Dies wurde mit der Standardvorlage (zwanzig) getestet. Ich bin wirklich nicht sicher, warum die beiden unten angegebenen Variablen auf meiner Website nicht funktionieren. Danke Keatch für den print_r() Tipp.

Warum ist diese Information so tief verborgen?

147
Alkaline

Die globale Variable WP $pagename sollte für Sie verfügbar sein. Ich habe gerade das gleiche Setup versucht, das Sie angegeben haben.

$pagename ist in der Datei wp-include/theme.php in der Funktion get_page_template() definiert. Diese Funktion wird natürlich aufgerufen, bevor die Seitendateiedateien analysiert werden, sodass sie an jeder Stelle in Ihren Vorlagen für Seiten verfügbar ist.

BEARBEITEN:  

  • Obwohl es nicht als dokumentiert erscheint, wird $pagename var nur festgelegt, wenn Sie Permalinks verwenden. Ich denke, das liegt daran, dass WP den Page-Slug nicht benötigt, wenn Sie sie nicht verwenden, also nicht eingerichtet wird.

  • $pagename ist nicht festgelegt, wenn Sie die Seite als statische Startseite verwenden.

  • Dies ist der Code in /wp-includes/theme.php, der die Lösung verwendet, auf die Sie hingewiesen haben, wenn $pagename nicht festgelegt werden kann:

    $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;  
    }
    
169
AJJ

Mein Ansatz, um den Slugnamen der Seite zu erhalten 

$slug = basename(get_permalink());
33
goksel

Ok, Sie müssen den Seitentitel BEVOR der Schleife ergreifen.

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

Überprüfen Sie die Referenz: http://codex.wordpress.org/Function_Reference/WP_Query#Properties .

Mach einen 

print_r($wp_query)

vor der Schleife, um alle Werte des $ wp_query-Objekts anzuzeigen

21
keatch
<?php wp_title(''); ?>

Das hat für mich funktioniert, wenn ich es richtig verstanden habe, möchten Sie den Seitennamen auf einer Seite erhalten, die Einträge enthält.

17
GregB

Sie können den aktuellen Seiten-, Post- oder benutzerdefinierten Beitragstyp mit der globalen Variablen $ post abrufen.

echo $post->post_title

Hinweis: In einer Funktion oder Klasse müssen Sie global $post; angeben, bevor Sie $ post verwenden möchten.

Wenn Sie Schleifen auf Ihrer Seite haben, müssen Sie sicherstellen, dass Sie jede Schleife mit wp_reset_postdata(); beenden, um $ post auf das Standardelement (die Seite) zurückzusetzen. 

Beachten Sie, dass die Variable "post_title" auch für jede benutzerdefinierte Schleife/Abfrage verfügbar ist. Dazu gehören Menüelemente und Medienanhänge. Alles in WordPress ist ein "Post". 

7
James

Wenn Sie auf die aktuelle Seite in Ihrer Datei "functions.php" zugreifen möchten (also, before die Schleife, bevor $post gefüllt wird, bevor $wp_query initialisiert wird, usw.), haben Sie wirklich keine andere Wahl, als zu klicken Greifen Sie auf die Servervariablen selbst zu und extrahieren Sie die angeforderte Seite aus der Abfragezeichenfolge.

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

Beachten Sie, dass dies eine "dumme" Lösung ist. Es ist beispielsweise nicht bekannt, dass die Seite mit dem Slug 'coming-soon' ebenfalls p=6 ist. Es wird davon ausgegangen, dass Ihre Permalink-Einstellungen auf pagename gesetzt sind (was sie sowieso sein sollten!).

Bei einem kontrollierten Szenario kann dies jedoch ein nützlicher kleiner Trick sein. Ich verwende dies in einer Situation, in der ich nicht angemeldete Besucher auf eine "in Kürze" -Seite umleiten möchte. aber ich muss sicherstellen, dass ich sie nicht in die gefürchtete "Weiterleitungsschleife" stecke, also muss ich die "in Kürze" -Seite von dieser Regel ausschließen:

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

Ich habe eine einfachere Lösung gefunden.

Rufen Sie den zurückgegebenen Wert des Seitennamens von wp_title () ab. Wenn leer, geben Sie den Namen der Startseite aus, andernfalls den Wert für echo wp_title.

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

Denken Sie daran, die Trennung mit dem ersten Argument zu entfernen und dann die Anzeige auf false zu setzen, um sie als Eingabe für die Variable zu verwenden. dann einfach den Code zwischen Ihren Überschriften usw. Tags.

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

Ein Leckerbissen für mich und die Sicherstellung, dass der erste in dem Abschnitt deklariert wird, in dem Sie den $ -Titel extrahieren möchten, kann so eingestellt werden, dass verschiedene Variablen zurückgegeben werden.

[email protected]

5
Tech1337

Versuche dies:

$pagename = get_query_var('pagename');
5

Wir müssen nur die globale Variable "post" verwenden.

global $post;
echo $post->post_title;

Dadurch wird der aktuelle Titel der Seite/des Beitrags wiederholt.

Ich hoffe das hilft!!!!

5

Ich glaube, dass das Roots-Starter-Theme eine fantastische Funktion hat, um den aktuellen Seitentitel zu erhalten, sehr hackbar, deckt alle Basen ab und kann leicht mit dem wp_title-Hook verwendet werden

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
Sy Holloway
 $ title = get_the_title ($ post); 
 $ parent_title = get_the_title ($ post-> post_parent); 

 echo $ title; 
 echo $ parent_title; 

Hoffe das wird helfen !! ;)

4
Jerad Rutnam

Ich weiß, das ist alt, aber ich bin darauf gestoßen, und was am einfachsten zu sein scheint, ist, dies zu benutzen.

<?php single_post_title(); ?>
3
Bowenac

Innerhalb der Schleife

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

Daraufhin wird der aktuelle Seitentitel angezeigt . Zur Aufbereitung  http://codex.wordpress.org/Function_Reference/get_the_title

2
Umair Hamid

Titel vor Beginn der Schleife anzeigen:

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

Vielen Dank

1
Ajay Malhotra

Wenn Sie nach der tatsächlich abgefragten Seite und nicht nach der Seiten-ID oder dem Slug suchen, können Sie die Abfrage abfangen:

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

Innerhalb Ihrer Funktion haben Sie Zugriff auf das $ wp-Objekt und können entweder den Seitennamen oder den Postennamen mit erhalten:

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

Wenn Sie andererseits wirklich die Postdaten benötigen, ist der erste Ort (und in diesem Zusammenhang wohl die 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;
     }
}

Schließlich ist mir klar, dass dies wahrscheinlich nicht die Frage des OP war. Wenn Sie jedoch nach dem Namen der Seite Admin suchen, verwenden Sie den globalen Code $pagenow.

1
Tom Auger

Hier ist meine Version:

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

get_query_var ('pagename') hat mir gerade den Page-Slug gegeben. Das obige ersetzt also alle Bindestriche und macht den ersten Buchstaben jedes Words in Großbuchstaben - damit kann es tatsächlich als Titel verwendet werden.

1
gray

Dies funktioniert auch, wenn Sie sich in der functions.php befinden. Dies ist nicht der beste Ansatz, da Sie das globale Array verwenden müssen, aber es funktioniert. 

1- Zuerst müssen wir einen Filter hinzufügen. Es muss einen besseren Filter als den template_include geben, aber ich kenne nicht alle. Bitte zeig mir den richtigen.

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- Vermeiden Sie die direkte Verwendung der Variablen

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

3- Jetzt können Sie die Funktion get_current_page() in jedem anderen Teil der functions.php verwenden.

0
toto_tico

Ich habe jetzt in Wordpress Codec diese Funktion gefunden:

abgefragthttp://codex.wordpress.org/Function_Reference/wp_list_pages

das ist ein Wrapper für $wp_query->get_queried_object. Dieser Beitrag brachte mich in die richtige Richtung, scheint aber dieses Update zu benötigen.

0
Sandra

Das habe ich am Ende 2018 verwendet:

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