Как получить текущее имя страницы в WordPress?
какой php-код можно использовать для получения текущего имени страницы в теме WordPress?
все решения, которые я видел до сих пор (the_title()
, get_page()->post_name
, get_post()
и т. д.) не работают для страницы, содержащей записи post. Все они вернут имя последней записи в блоге.
заявленный другой способ, предположим, что у вас есть страница, созданная в WordPress с именем "мои новости". Эта страница задается как "post page". Добавьте пару сообщений на страницу. Теперь, какой API можно использовать чтобы получить строку "my-news" вместо названия последнего поста?
Edit:
я нашел следующую переменную, которая, кажется, работает.
$wp_query->queried_object->post_name
это на самом деле url дружественная версия имени страницы (slug), что я тоже искал. Это было протестировано с шаблоном по умолчанию (twentyten). Я действительно не уверен, почему две переменные, приведенные ниже, не работают на моем сайте. Спасибо keatch для print_r()
совет.
теперь, почему эта информация скрыта так глубоко?
18 ответов
глобальная переменная WP $pagename
должен быть доступен для вас, я только что попробовал с той же настройкой, которую вы указали.
$pagename
определяется в файле wp-includes / theme.php, внутри функции get_page_template()
, который, конечно, вызывается до того, как файлы темы страницы будут проанализированы, поэтому он доступен в любой момент внутри ваших шаблонов для страниц.
EDIT:
хотя это, похоже, не документировано,
$pagename
var устанавливается только при использовании permalinks. Я думаю, это потому, что если вы не используете их, 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; }
Ok, вы должны захватить заголовок страницы перед циклом.
$page_title = $wp_query->post->post_title;
Проверьте для справки:http://codex.wordpress.org/Function_Reference/WP_Query#Properties.
сделать
print_r($wp_query)
перед циклом, чтобы увидеть все значения объекта $wp_query
<?php wp_title(''); ?>
это сработало для меня, если я правильно понимаю, вы хотите получить имя страницы на странице, на которой есть записи post?
вы можете получить текущую страницу, сообщение или пользовательский тип сообщения с глобальной переменной $post.
echo $post->post_title
Примечание: в функции или классе вам нужно указать global $post;
перед попыткой использовать $post.
Если у вас есть петли на Вашей странице, убедитесь, что вы заканчиваете каждый цикл с wp_reset_postdata();
чтобы установить $post обратно в отображаемый элемент по умолчанию (страница).
Примечание, переменная' post_title ' также доступна для любого пользовательского цикла / запроса.. включающий пункты меню и вложения средств.. все в WordPress-это "сообщение".
если вы хотите получить доступ к текущей странице из ваших функций.файл php (так, до петли, перед $post
заполняется, перед $wp_query
инициализируется, и т. д...) у вас действительно нет выбора, кроме как получить доступ к самим переменным сервера и извлечь запрошенную страницу из строки запроса.
$page_slug = trim( $_SERVER["REQUEST_URI"] , '/' )
обратите внимание, что это "тупое" решение. Он не знает, например, что страница со слизняком "скоро" также p=6
. И это предполагает, что ваши настройки permalink установлены в 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' );
}
Я придумал более простое решение.
получить возвращаемое значение имени страницы из wp_title (), если пустое, распечатать имя домашней страницы, иначе echo wp_title значение.
<?php $title = wp_title('',false); ?>
Не забудьте удалить разделение с помощью первого arg, а затем установить display в false для использования в качестве входа в переменную. затем просто bung код между вашим заголовком и т. д. метить.
<?php if ( $title == "" ) : echo "Home"; else : echo $title; endif; ?>
работало удовольствие для меня и гарантируя, что первое объявлено в разделе, где вы хотите извлечь $title, Это можно настроить для возврата различных переменных.
sean@loft6.co.uk
Я считаю, что тема 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();
}
}
нам просто нужно использовать глобальную переменную "post".
global $post;
echo $post->post_title;
это будет Эхо текущей страницы / заголовка сообщения.
надеюсь, что это поможет!!!!
$title = get_the_title($post); $parent_title = get_the_title($post->post_parent); echo $title; echo $parent_title;
надеюсь, это поможет !! ;)
В Рамках Цикла
<pre>
if ( have_posts() ) : while ( have_posts() ) : the_post();
/******************************************/
echo get_the_title();
/******************************************/
endwhile; endif;
</pre>
Это покажет вам заголовок текущей страницы. Для рефренса http://codex.wordpress.org/Function_Reference/get_the_title
Я знаю, что это старый, но я наткнулся на это, и, кажется, проще всего использовать это.
<?php single_post_title(); ?>
один из вариантов, если вы ищете фактическую запрашиваемую страницу, а не идентификатор страницы или слизень, чтобы перехватить запрос:
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'];
}
}
если, с другой стороны, вам действительно нужны данные post, первое место, чтобы получить его (и, возможно, в этом контексте, лучшее):
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 имя страницы, Используйте global $pagenow
.
вот мой вариант:
$title =ucwords(str_replace('-', ' ', get_query_var('pagename')));
get_query_var ('pagename') просто давал мне слизень страницы. Таким образом, вышеизложенное заменяет все тире и делает первую букву каждого слова заглавным - поэтому его можно использовать в качестве заголовка.
Я нашел в Wordpress Codec
функции:
сделать запрос http://codex.wordpress.org/Function_Reference/wp_list_pages
, который является оболочкой для $wp_query->get_queried_object
. Этот пост поставил меня в правильном направлении, но кажется, что ему нужно это обновление.
Это также работает, если вы находитесь в функции.РНР. Это не лучший подход, так как вы должны использовать глобальный массив, но это работает.
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()
в любой другой части функции.РНР.