it-swarm.com.ru

Как получить имя текущей страницы в WordPress?

Какой php-код можно использовать для получения имени текущей страницы в теме WordPress?

Все решения, которые я видел до сих пор (the_title(), get_page()->post_name, get_post() и т.д.), Не работают для страницы, содержащей записи записей. Все они вернут имя последней записи в блоге.

Другими словами, предположим, что у вас есть страница, созданная в WordPress с именем «Мои новости» . Эта страница установлена ​​как «страница поста». Добавьте пару постов на страницу ....... Теперь, какой API можно использовать для получения строки "my-news" вместо названия последнего поста?

Правка:

Я нашел следующую переменную, которая, кажется, работает.

$wp_query->queried_object->post_name

На самом деле это дружественная к URL версия названия страницы (slug), что я тоже искал. Это было проверено с шаблоном по умолчанию (двадцатка). Я действительно не уверен, почему две переменные, указанные ниже, не работают на моем сайте. Спасибо keatch за подсказку print_r().

Теперь, почему эта информация так глубоко спрятана?

147
Alkaline

Глобальная переменная WP $pagename должна быть доступна для вас, я только что попробовал с той же настройкой, которую вы указали.

$pagename определен в файле wp-includes/theme.php внутри функции get_page_template(), которая, конечно, вызывается до анализа файлов вашей страницы, поэтому она доступна в любой точке внутри ваших шаблонов для страниц.

Правка:  

  • Хотя это не выглядит документированным, переменная $pagename устанавливается, только если вы используете постоянные ссылки. Я полагаю, это потому, что если вы их не используете, WP не нужен слаг страницы, поэтому он не настраивает его.

  • $pagename не устанавливается, если вы используете страницу в качестве статической главной страницы.

  • Это код внутри /wp-includes/theme.php, который использует решение, которое вы указали, когда $pagename не может быть установлен:

    $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

Мой подход, чтобы получить имя страницы слаг 

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

Хорошо, вы должны захватить заголовок страницы ДО цикла.

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

Проверьте для ссылки: http://codex.wordpress.org/Function_Reference/WP_Query#Properties .

Сделать 

print_r($wp_query)

перед циклом, чтобы увидеть все значения объекта $ wp_query

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

Это сработало для меня, если я правильно понимаю, вы хотите получить имя страницы на странице, где есть записи?

17
GregB

Вы можете получить текущую страницу, сообщение или пользовательский тип сообщения с помощью глобальной переменной $ post.

echo $post->post_title

Примечание. В функции или классе вам необходимо указать global $post;, прежде чем пытаться использовать $ post.

Если у вас есть циклы на вашей странице, убедитесь, что вы заканчиваете каждый цикл с помощью wp_reset_postdata();, чтобы установить $ post обратно на отображаемый элемент по умолчанию (страницу). 

Обратите внимание, что переменная 'post_title' также доступна для любого пользовательского цикла/запроса ... включая элементы меню и медиа-вложения ... все в WordPress является "постом". 

7
James

Если вы хотите получить доступ к текущей странице из файла functions.php (например, перед цикл, до заполнения $post, до инициализации $wp_query и т.д.), У вас действительно нет другого выбора, кроме как получить доступ к самим переменным сервера и извлечь запрашиваемую страницу из строки запроса.

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

Обратите внимание, что это «тупое» решение. Например, он не знает, что страница со слагом «скоро будет» также p=6. И это предполагает, что ваши постоянные настройки установлены на pagename (что они должны быть в любом случае!).

Тем не менее, может быть полезным маленький трюк, если у вас есть контролируемый сценарий. Я использую это в ситуации, когда я хочу перенаправить незарегистрированных посетителей на страницу «скоро»; но я должен убедиться, что я не бросаю их в страшный «цикл перенаправления», поэтому мне нужно исключить страницу «скоро» из этого правила:

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

Я придумал более простое решение.

Получить возвращаемое значение имени страницы из wp_title (), если оно пустое, напечатать имя домашней страницы, в противном случае повторить значение wp_title.

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

Не забудьте удалить разделение с помощью первого аргумента, а затем установите для отображения значение false, чтобы использовать его в качестве входных данных для переменной. затем просто вставьте код между тегами заголовка и т. д.

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

Сработал для меня и убедившись, что первый объявлен в разделе, где вы хотите извлечь $ title, это может быть настроено для возврата различных переменных.

[email protected]

5
Tech1337

Попробуй это:

$pagename = get_query_var('pagename');
5
Mohammad Sabbagh

Нам просто нужно использовать глобальную переменную post.

global $post;
echo $post->post_title;

Это будет повторять текущую страницу/заголовок сообщения.

Надеюсь, что это поможет !!!!

5
Rahul Balakrishna

Я полагаю, что начальная тема Roots имеет фантастическую функцию для получения заголовка текущей страницы, очень хакерская, охватывает все базы и может быть легко использована с помощью хука 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
Sy Holloway
 $ title = get_the_title ($ post); 
 $ parent_title = get_the_title ($ post-> post_parent); 

 echo $ title; 
 echo $ parent_title; 

Надеюсь, это поможет! ;)

4
Jerad Rutnam

Я знаю, что это старо, но я сталкивался с этим, и то, что кажется самым легким, использует это.

<?php single_post_title(); ?>
3
Bowenac

Внутри петли

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

Это покажет вам название текущей страницы . Для refrence  http://codex.wordpress.org/Function_Reference/get_the_title

2
Umair Hamid

Показать заголовок до начала цикла:

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

Спасибо

1
Ajay Malhotra

Один из вариантов, если вы ищете реальную запрашиваемую страницу, а не идентификатор страницы или слаг, - перехватить запрос:

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

В пределах вашей функции у вас есть доступ к объекту $ wp, и вы можете получить либо имя страницы, либо имя сообщения с помощью:

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

Если, с другой стороны, вам действительно нужны данные поста, первое место для их получения (и, возможно, в этом контексте, лучшее):

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

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

Наконец, я понимаю, что это, вероятно, не был вопрос ОП, но если вы ищете Admin имя страницы, используйте глобальный $pagenow.

1
Tom Auger

Вот моя версия:

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

get_query_var ('pagename') просто давал мне слаг страницы. Таким образом, вышеприведенный текст заменяет все тире и делает первую букву каждого слова в верхнем регистре - таким образом, его можно использовать в качестве заголовка.

1
gray

Это также работает, если вы находитесь в functions.php. Это не лучший подход, так как вы должны использовать глобальный массив, но он работает. 

1- Во-первых, нам нужно добавить фильтр. Должен существовать лучший фильтр для использования, чем template_include, но я не знаю всех из них. Пожалуйста, укажите мне на правильный.

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- Избегайте использования переменной напрямую

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

3. Теперь вы можете использовать функцию get_current_page() в любой другой части functions.php.

0
toto_tico

Я нашел в Wordpress Codec эту функцию:

получить запросhttp://codex.wordpress.org/Function_Reference/wp_list_pages

которая является оберткой для $wp_query->get_queried_object. Этот пост направил меня в правильном направлении, но, похоже, ему нужно это обновление.

0
Sandra

Вот что я использовал в 2018 году:

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