मैं वर्डप्रेस में वर्तमान पृष्ठ का नाम कैसे प्राप्त कर सकता हूं?


162

वर्डप्रेस थीम में वर्तमान पृष्ठ नाम को पुनः प्राप्त करने के लिए क्या PHP कोड का उपयोग किया जा सकता है?

सभी समाधान मैं अब तक (देखा है the_title(), get_page()->post_name, get_post(), आदि) एक पेज कि पोस्ट प्रविष्टियों शामिल के लिए काम नहीं करते। वे सभी नवीनतम ब्लॉग प्रविष्टि का नाम वापस करेंगे।

एक और तरीका बताया गया है, मान लें कि आपके पास वर्डप्रेस में "माय न्यूज" नाम का पेज है। यह पृष्ठ "पोस्ट पृष्ठ" के रूप में सेट है। पेज पर कुछ पोस्ट जोड़ें। अब, नवीनतम पोस्ट के नाम के बजाय स्ट्रिंग "माय-न्यूज" को पुनः प्राप्त करने के लिए क्या एपीआई का उपयोग किया जा सकता है?


मैंने निम्नलिखित चर पाया है जो काम करने लगता है।

$wp_query->queried_object->post_name

यह वास्तव में पेज नाम (स्लग) का URL अनुकूल संस्करण है, जो कि मैं भी ढूंढ रहा था। यह डिफ़ॉल्ट टेम्पलेट ( ट्वेंटी टेन ) के साथ परीक्षण किया गया था । मुझे वास्तव में यकीन नहीं है कि नीचे दिए गए दो चर मेरी साइट पर काम क्यों नहीं करते हैं। धन्यवाद करने के लिए keatch के लिए print_r()टिप

अब, यह जानकारी इतनी नीचे क्यों छिपी हुई है?


नाम के उपयोग के लिए: single_post_title ('', false); स्लग के उपयोग के लिए: get_query_var ('pagename');
jtmielczarek

जवाबों:


182

वर्डप्रेस ग्लोबल वैरिएबल $pagenameआपके लिए उपलब्ध होना चाहिए। मैंने अभी आपके द्वारा निर्दिष्ट समान सेटअप के साथ प्रयास किया है।

$pagenameफ़ंक्शन के अंदर, फ़ाइल wp-शामिल / theme.php में परिभाषित किया गया है get_page_template(), जो निश्चित रूप से आपके पेज थीम फ़ाइलों के पार्स होने से पहले कहा जाता है, इसलिए यह पृष्ठों के लिए आपके टेम्पलेट के अंदर किसी भी बिंदु पर उपलब्ध है।

  • हालाँकि यह प्रलेखित होने के लिए प्रकट नहीं होता है, $pagenameयदि आप Permalinks का उपयोग करते हैं तो var केवल सेट किया जाता है। मुझे लगता है कि यह इसलिए है क्योंकि यदि आप उनका उपयोग नहीं करते हैं, तो वर्डप्रेस को पेज स्लग की आवश्यकता नहीं है, इसलिए यह इसे सेट नहीं करता है।

  • $pagename यदि आप पृष्ठ का स्थैतिक फ्रंट पेज के रूप में उपयोग करते हैं तो यह सेट नहीं है।

    • यह /wp-includes/theme.php के अंदर का कोड है, जो आपके द्वारा बताए गए समाधान का उपयोग करता है जब $pagenameइसे सेट नहीं किया जा सकता है:

      $ pagename = get_query_var ('pagename'); अगर ($ pagename && $ id> 0) {// यदि कोई स्थैतिक पृष्ठ सामने पृष्ठ के रूप में सेट है, तो $ pagename सेट नहीं किया जाएगा। इसे क्वेरिड ऑब्जेक्ट $ पोस्ट = $ wp_query-> get_queried_object () से पुनः प्राप्त करें; $ pagename = $ post-> post_name; }


4
शीर्षलेख के अंदर उपयोग किए जाने पर $ pagename खाली है। मैंने डिफ़ॉल्ट टेम्पलेट (बीसवें) का उपयोग करने की कोशिश की है और <body> टैग के तुरंत बाद इसका उपयोग कर रहा है लेकिन यह सेट नहीं है। संयोग से, उस स्तर पर कोई भी क्वेरी_वेयर वेरिएबल सेट नहीं लगता है।
बर्नार्ड

1
मुझे उस चर की अनुपस्थिति का कोई कारण नहीं दिखाई दे रहा है, शायद मैंने आपके सेटअप को गलत समझा है? मैं समझ गया कि आप इसे एक पेज टेम्पलेट के अंदर करने की कोशिश कर रहे हैं। भले ही आप शीर्ष लेख की पहली पंक्ति में "इको $ पेगेनमे" लिखते हैं। यदि आपको यह मूल्य देना चाहिए। WP के किस संस्करण से आप निपट रहे हैं?
AJJ

1
आप get_query_var ('pagename') का उपयोग करके थोड़ा अलग दृष्टिकोण आज़मा सकते हैं।
AJJ

@AJweb: हाँ, यह एक ऐसे टेम्पलेट के लिए है जिसका मैं निर्माण कर रहा हूं लेकिन मैं टेस्टिंग के लिए डिफ़ॉल्ट टेम्पलेट का उपयोग कर रहा हूं। मुझे आभास होता है कि आपने अपने समाधान का परीक्षण नहीं किया है। क्या आप <h1> <; php echo $ pagename?> </ H1> को ठीक करने के बाद पेज का नाम देखते हैं?
बर्नार्ड

1
यह मेरे लिए चाल है:, $pagename = $wp_query->queried_object->post_name;बस से पहले सेट करने के लिए मत भूलनाglobal $wp_query; !
सारण

38

पृष्ठ का स्लग नाम पाने के लिए मेरा दृष्टिकोण:

$slug = basename(get_permalink());

यह तभी काम करता है जब वे सुंदर यूआरएल का उपयोग करते हैं, है ना?
बेटी

24

ठीक है, आपको लूप से पहले पृष्ठ का शीर्षक लेना चाहिए ।

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

संदर्भ के लिए जाँच करें: http://codex.wordpress.org/Function_Reference/WP_Query#Properties

ए करें

print_r($wp_query)

लूप से पहले $wp_queryऑब्जेक्ट के सभी मूल्यों को देखने के लिए ।


1
यह भी काम नहीं करता है। अगर मैं $ wp_query वस्तु को <body> टैग के ठीक बाद प्रिंट करता हूं तो मैं देखता हूं कि पहली पोस्ट ऑब्जेक्ट ब्लॉग प्रविष्टि है, न कि केवल पृष्ठ। हालाँकि, print_r () टिप के लिए धन्यवाद। मैं उस चर का पता लगा सकता हूं जिसमें वह जानकारी है जिसकी मैं तलाश कर रहा हूं (इस जानकारी को प्रश्न में डाल रहा हूं)।
बर्नार्ड

यह सुनकर कि $ page_title var ने हेडर में मेरे लिए काम किया, धन्यवाद।
क्लेयर

22
<?php wp_title(''); ?>

इसने मेरे लिए काम किया।

अगर मैं सही तरीके से समझूं, तो आप उस पेज पर पेज का नाम पाना चाहते हैं जिसमें पोस्ट एंट्रीज हैं।


10

आप वैश्विक चर के साथ वर्तमान पृष्ठ, पोस्ट या कस्टम पोस्ट प्रकार प्राप्त कर सकते हैं $post:

echo $post->post_title

नोट: किसी फ़ंक्शन या क्लास में आपको global $post;उपयोग करने की कोशिश करने से पहले निर्दिष्ट करना होगा $post

यदि आपके पास अपने पृष्ठ पर लूप हैं, तो सुनिश्चित करें कि आप प्रत्येक लूप को डिफ़ॉल्ट आइटम पर वापस wp_reset_postdata();सेट $postकरने के लिए प्रदर्शित करते हैं (पृष्ठ)।

ध्यान दें, किसी भी कस्टम लूप / क्वेरी के लिए 'post_title' वैरिएबल भी उपलब्ध है ... मेनू आइटम और मीडिया अटैचमेंट सहित ... वर्डप्रेस में सब कुछ एक 'पोस्ट' है।


यह उत्तर 2012 से है, क्या कोई ज्ञान है जैसे कि यह विधि अभी भी अधिक हाल के WP के साथ काम करेगी?
मार्टिन

1
हां यह होगा - पोस्ट प्रकारों के WP के कोर हैंडलिंग नहीं बदला है
जेम्स

8

आप अपने 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

मेरा मानना ​​है कि वर्तमान पृष्ठ का शीर्षक पाने के लिए रूट्स स्टार्टर थीम का शानदार कार्य है। यह बहुत हैक करने योग्य है, सभी ठिकानों को कवर करता है, और wp_titleहुक के साथ आसानी से उपयोग किया जा सकता है ।

/**
 * 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

मैं एक सरल समाधान के साथ आया हूं।

पृष्ठ नाम का लौटाया मान wp_title () से प्राप्त करें। यदि रिक्त है, तो मुखपृष्ठ नाम प्रिंट करें, अन्यथा wp_title () मान को गूँजें।

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

पहले तर्क के साथ पृथक्करण को हटाने के लिए याद रखें और फिर चर के इनपुट के रूप में उपयोग करने के लिए प्रदर्शन को झूठे पर सेट करें। फिर बस अपने हेडिंग आदि टैग्स के बीच का कोड डलवाएं।

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

इसने मेरे लिए एक उपचार का काम किया और यह सुनिश्चित किया कि पहला उस खंड में घोषित किया जाए जहाँ आप इसे निकालना चाहते हैं $title, इसे दूसरे बड़े चर वापस करने के लिए तैयार किया जा सकता है।




3

यह प्रयोग करने में सबसे आसान लगता है:

<?php single_post_title(); ?>

1
यह कॉल अंतिम पोस्ट नाम लौटाता है, न कि पेज नाम जिसमें पोस्ट शामिल हैं, कम से कम यही है कि मैं इसे परीक्षण किए बिना ऑनलाइन डॉक्टर से समझता हूं।
बर्नार्ड

यही वह है जिसकी तलाश में मैं हूं। मैंने अपने पृष्ठ के लिए एक नया शीर्ष लेख बनाया और इससे पृष्ठ का नाम अपेक्षित रूप से खिंच गया। धन्यवाद!
एजे


2

एक विकल्प, यदि आप पृष्ठ के बजाय आईडी या स्लग के वास्तविक वास्तविक पृष्ठ की तलाश कर रहे हैं, तो क्वेरी को रोकना है:

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

अंत में, मुझे एहसास हुआ कि शायद यह ओपी का सवाल नहीं था, लेकिन यदि आप एडमिन पेज नाम की तलाश कर रहे हैं , तो वैश्विक उपयोग करें $pagenow


2

WordPress लूप के भीतर :

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

यह आपको वर्तमान पृष्ठ शीर्षक दिखाएगा।

संदर्भ के लिए: get_the_title ()


1

यहाँ मेरा संस्करण है:

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

get_query_var ('pagename') सिर्फ मुझे पेज स्लग दे रहा था। इसलिए उपरोक्त सभी डैश को बदल देता है, और प्रत्येक शब्द के पहले अक्षर को अपरकेस बनाता है - इसलिए इसे वास्तव में शीर्षक के रूप में उपयोग किया जा सकता है।


0

यह वही है जो मैंने 2018 तक उपयोग करके समाप्त कर दिया है:

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

0

अब मुझे वर्डप्रेस कोडेक पर यह फंक्शन मिल गया है ,

चौकन्ना हो जाओ

जो के लिए एक आवरण है $wp_query->get_queried_object

इस पोस्ट ने मुझे सही दिशा में ला दिया, लेकिन ऐसा लगता है कि इसे इस अद्यतन की आवश्यकता है।


0

यदि आप फ़ंक्शन में हैं, तो यह भी काम करता है। वैश्विक सरणी का उपयोग करने के बाद से यह सबसे अच्छा तरीका नहीं है, लेकिन यह काम करता है।

  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()को किसी अन्य भाग में उपयोग कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.