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

<p>какой php-код можно использовать для получения имени текущей страницы в теме wordpress?</p><p>все решения, которые я видел до сих пор (<code>the\_title()</code>, <code>get\_page()->post\_name</code>, <code>get\_post()</code> и т.д.), не работают для страницы, содержащей записи записей. все они вернут имя последней записи в блоге.</p><p>другими словами, предположим, что у вас есть страница, созданная в wordpress с именем «мои новости» . эта страница установлена как «страница поста». добавьте пару постов на страницу ....... теперь, какой api можно использовать для получения строки "my-news" вместо названия последнего поста?</p><p><strong> правка: </strong></p><p>я нашел следующую переменную, которая, кажется, работает.</p><pre><code>$wp_query->queried_object->post_name на самом деле это дружественная к url версия названия страницы (slug), что я тоже искал. это было проверено с шаблоном по умолчанию (двадцатка). я действительно не уверен, почему две переменные, указанные ниже, не работают на моем сайте. спасибо keatch за подсказку print_r().теперь, почему эта информация так глубоко спрятана?

глобальная переменная wp $pagename</code> должна быть доступна для вас, я только что попробовал с той же настройкой, которую вы указали.</p><p><code>$pagename определен в файле wp-includes/theme.php внутри функции get_page_template(), которая, конечно, вызывается до анализа файлов вашей страницы, поэтому она доступна в любой точке внутри ваших шаблонов для страниц.<strong> правка: </strong>  хотя это не выглядит документированным, переменная $pagename</code> устанавливается, только если вы используете постоянные ссылки. я полагаю, это потому, что если вы их не используете, wp не нужен слаг страницы, поэтому он не настраивает его.</p></li> <li><p><code>$pagename не устанавливается, если вы используете страницу в качестве статической главной страницы. это код внутри /wp-includes/theme.php, который использует решение, которое вы указали, когда $pagename</code> не может быть установлен:</p> <pre><code>$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; } </code></pre></li> </ul>

<p>мой подход, чтобы получить имя страницы слаг </p><pre><code>$slug = basename(get_permalink()); 

хорошо, вы должны захватить заголовок страницы до цикла.$page\_title = $wp_query->post->post_title; проверьте для ссылки: <a href="http://codex.wordpress.org/function_reference/wp_query#properties">http://codex.wordpress.org/function_reference/wp_query#properties .сделать print_r($wp\_query) </code></pre><p>перед циклом, чтобы увидеть все значения объекта $ wp_query

<?php wp_title(''); ?> это сработало для меня, если я правильно понимаю, вы хотите получить имя страницы на странице, где есть записи?

вы можете получить текущую страницу, сообщение или пользовательский тип сообщения с помощью глобальной переменной $ post.</p><p><code>echo $post->post_titleпримечание. в функции или классе вам необходимо указать global $post;</code>, прежде чем пытаться использовать $ post.если у вас есть циклы на вашей странице, убедитесь, что вы заканчиваете каждый цикл с помощью wp_reset_postdata();, чтобы установить $ post обратно на отображаемый элемент по умолчанию (страницу). </p><p>обратите внимание, что переменная 'post\_title' также доступна для любого пользовательского цикла/запроса ... включая элементы меню и медиа-вложения ... все в wordpress является "постом". </p>

<p>если вы хотите получить доступ к текущей странице из файла functions.php (например,<em> перед </em>цикл, до заполнения <code>$post, до инициализации $wp\_query</code> и т.д.), у вас действительно нет другого выбора, кроме как получить доступ к самим переменным сервера и извлечь запрашиваемую страницу из строки запроса.</p><pre><code>$page_slug = trim( $\_server["request\_uri"] , '/' ) </code></pre><p>обратите внимание, что это «тупое» решение. например, он не знает, что страница со слагом «скоро будет» также <code>p=6</code>. и это предполагает, что ваши постоянные настройки установлены на <code>pagename</code> (что они должны быть в любом случае!).</p><p>тем не менее, может быть полезным маленький трюк, если у вас есть контролируемый сценарий. я использую это в ситуации, когда я хочу перенаправить незарегистрированных посетителей на страницу «скоро»; но я должен убедиться, что я не бросаю их в страшный «цикл перенаправления», поэтому мне нужно исключить страницу «скоро» из этого правила:</p><pre><code>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); ?> </code></pre><p>не забудьте удалить разделение с помощью первого аргумента, а затем установите для отображения значение false, чтобы использовать его в качестве входных данных для переменной. затем просто вставьте код между тегами заголовка и т. д.</p><pre><code><?php if ( $title == "" ) : echo "home"; else : echo $title; endif; ?> </code></pre><p>сработал для меня и убедившись, что первый объявлен в разделе, где вы хотите извлечь $ title, это может быть настроено для возврата различных переменных.sean@loft6.co.uk

попробуй это:$pagename = get\_query\_var('pagename'); </code></pre>

<p>нам просто нужно использовать глобальную переменную post.</p><pre><code>global $post; echo $post->post\_title; </code></pre><p>это будет повторять текущую страницу/заголовок сообщения.</p><p>надеюсь, что это поможет !!!!</p>

<p>я полагаю, что начальная тема roots имеет фантастическую функцию для получения заголовка текущей страницы, очень хакерская, охватывает все базы и может быть легко использована с помощью хука wp\_title</p><p> <a href="https://github.com/roots/roots/blob/6.5.0/lib/titles.php">https://github.com/roots/roots/blob/6.5.0/lib/titles.php</a> .</p><pre><code>/** * 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(); } } 

 $ title = get\_the\_title ($ post); $ parent\_title = get\_the\_title ($ post-> post_parent); echo $ title; echo $ parent_title; надеюсь, это поможет! ;)

я знаю, что это старо, но я сталкивался с этим, и то, что кажется самым легким, использует это.<?php single_post_title(); ?> 

внутри петли if ( have_posts() ) : while ( have_posts() ) : the_post(); // echo get_the_title(); // endwhile; endif;  это покажет вам название текущей страницы . для refrence <a href="http://codex.wordpress.org/function_reference/get_the_title"> <a href="http://codex.wordpress.org/function_reference/get_the_title" rel="nofollow">http://codex.wordpress.org/function_reference/get_the_title 

показать заголовок до начала цикла:$page\_title = $wp_query->post->post_title; спасибо

один из вариантов, если вы ищете реальную запрашиваемую страницу, а не идентификатор страницы или слаг, - перехватить запрос:add_action('parse_request', 'show_query', 10, 1); в пределах вашей функции у вас есть доступ к объекту $ wp, и вы можете получить либо имя страницы, либо имя сообщения с помощью:</p><pre><code>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</code>.</p>

<p>вот моя версия:</p><pre><code>$title =ucwords(str_replace('-', ' ', get_query_var('pagename'))); get_query_var ('pagename') просто давал мне слаг страницы. таким образом, вышеприведенный текст заменяет все тире и делает первую букву каждого слова в верхнем регистре - таким образом, его можно использовать в качестве заголовка.

это также работает, если вы находитесь в 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; } </code></pre><p>2- избегайте использования переменной напрямую</p><pre><code>function get\_current\_page( $echo = false ) { if( !isset( $globals['current\_page'] ) ) return false; return $globals['current_page']; } 3. теперь вы можете использовать функцию get_current_page() в любой другой части functions.php.

я нашел в wordpress codec эту функцию:получить запрос <a href="http://codex.wordpress.org/function_reference/wp_list_pages">http://codex.wordpress.org/function_reference/wp_list_pages которая является оберткой для $wp\_query->get\_queried\_object</code>. этот пост направил меня в правильном направлении, но, похоже, ему нужно это обновление.</p>

<p>вот что я использовал в 2018 году:</p><pre><code><section id="top-<?=(is\_front\_page() ? 'home' : basename(get\_permalink()));?>"> </code></pre>