Как получить текущее имя страницы в WordPress?
какой php код можно использовать для получения текущего имени страницы в теме WordPress?
все решения, которые я видел до сих пор (the_title(),get_page()->post_name,get_post() и т. д.) не работают для страницы, содержащей записи post. Все они вернут имя последней записи в блоге.
заявленный другой способ, предположим, что у вас есть страница, созданная в WordPress с именем "мои новости".
В данном разделе находится как "опубликовать страницу". Добавьте пару сообщений на страницу.
Теперь, какой API можно использовать чтобы получить строку "my-news" вместо имени последнего поста?
Edit:
я нашел следующую переменную, которая, кажется, работает.
$wp_query->queried_object->post_name
это на самом деле url дружественная версия имени страницы (slug), который я тоже искал. Это было проверено с шаблоном по умолчанию (twentyten). Я действительно не уверен, почему две переменные, приведенные ниже, не работают на моем сайте. Спасибо китч за print_r() совет.
теперь, почему эта информация скрыта так глубоко?
18 ответов:
глобальная переменная WP
$pagenameдолжен быть доступен для вас, я только что попробовал с той же настройкой, которую вы указали.
$pagenameопределяется в файле wp-includes / theme.php, внутри функцииget_page_template(), который, конечно, вызывается до того, как файлы темы страницы будут проанализированы, поэтому он доступен в любой момент внутри ваших шаблонов для страниц.EDIT:
хотя это, кажется, не документировано,
$pagenamevar устанавливается только при использовании постоянных ссылок. Я думаю, это потому, что если вы их не используете, WP не нужен Page slug, поэтому он не настраивает его.
$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; }
Ок, вы должны захватить заголовок страницы перед циклом.
$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"] , '/' )обратите внимание, что это "тупое" решение. Он не знает, например, что страница с slug 'coming-soon' также
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 (), если пусто, распечатать имя домашней страницы, в противном случае эхо wp_title значение.
<?php $title = wp_title('',false); ?>Не забудьте удалить разделение с первым arg, а затем установить display в false для использования в качестве входа в переменную. затем просто повесьте код между вашим заголовком и т. д. метить.
<?php if ( $title == "" ) : echo "Home"; else : echo $title; endif; ?>работал удовольствие для меня и гарантируя, что первый объявлен в разделе, где вы если вы хотите извлечь $ title, Это можно настроить для возврата различных переменных.
Я считаю, что тема 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 имя страницы, Используйте глобальный
$pagenow.
вот мой вариант:
$title =ucwords(str_replace('-', ' ', get_query_var('pagename')));get_query_var ('pagename') просто давал мне страницу slug. Таким образом, вышеизложенное заменяет все тире и делает первую букву каждого слова заглавной - поэтому его можно использовать в качестве заголовка.
Я нашел в
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()в любой другой части функции.РНР.
Comments