Как получить имя текущей страницы в WordPress? - PullRequest
154 голосов
/ 29 января 2011

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

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

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

Редактировать:

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

$wp_query->queried_object->post_name

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

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

Ответы [ 19 ]

176 голосов
/ 29 января 2011

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

$pagename определено в файле wp-includes / theme.php внутриget_page_template()

РЕДАКТИРОВАТЬ:

* функция *1005*, которая, конечно же, вызывается перед анализом файлов вашей страницы, поэтому она доступна в любой точке ваших шаблонов для страниц.1011 *

Хотя это и не задокументировано, $pagename var устанавливается только при использовании постоянных ссылок.Я полагаю, это потому, что если вы их не используете, 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;  
}
35 голосов
/ 30 сентября 2011

Мой подход к получению имени слага страницы

$slug = basename(get_permalink());
22 голосов
/ 29 января 2011

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

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

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

Сделайте

print_r($wp_query)

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

20 голосов
/ 10 марта 2011
<?php wp_title(''); ?>

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

7 голосов
/ 05 апреля 2013

Если вы хотите получить доступ к текущей странице из вашего файла 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 голосов
/ 09 марта 2012

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

echo $post->post_title

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

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

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

6 голосов
/ 27 февраля 2014

Я считаю, что тема Roots Starter имеет фантастическую функцию для получения заголовка текущей страницы, очень легко взламывается, охватывает все базы и может быть легко использована с крюком 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 голосов
/ 22 мая 2014

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

global $post;
echo $post->post_title;

Отобразится текущая страница / заголовок сообщения.

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

5 голосов
/ 09 сентября 2013

Я предложил более простое решение.

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

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

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

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

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

sean@loft6.co.uk

5 голосов
/ 10 сентября 2012

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

$pagename = get_query_var('pagename');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...