আমি কীভাবে ওয়ার্ডপ্রেসে বর্তমান পৃষ্ঠার নাম পেতে পারি?


162

ওয়ার্ডপ্রেস থিমের বর্তমান পৃষ্ঠার নামটি পুনরুদ্ধার করতে কোন পিএইচপি কোড ব্যবহার করা যেতে পারে?

সকল সমাধান আমি এতদূর (দেখেছ the_title(), get_page()->post_name, get_post(), ইত্যাদি) একটি পৃষ্ঠায় যে পোস্টে এন্ট্রি রয়েছে জন্য কাজ করে না। তারা সকলেই সর্বশেষতম ব্লগ প্রবেশের নামটি ফিরিয়ে দেবে।

অন্যভাবে স্থিত করে, ধরে নিন যে আপনার "মাই নিউজ" নামটি দিয়ে ওয়ার্ডপ্রেসে একটি পৃষ্ঠা তৈরি হয়েছে। এই পৃষ্ঠাটি "পোস্ট পৃষ্ঠা" হিসাবে সেট করা আছে। পৃষ্ঠায় কয়েকটি দম্পতি যুক্ত করুন। এখন, সর্বশেষ পোস্টের নামের পরিবর্তে "আমার-সংবাদ" স্ট্রিংটি পুনরুদ্ধার করতে কোন এপিআই ব্যবহার করা যেতে পারে?


আমি নিম্নলিখিত পরিবর্তনশীল খুঁজে পেয়েছি যা কাজ করে বলে মনে হচ্ছে।

$wp_query->queried_object->post_name

এটি আসলে পৃষ্ঠার নাম (স্লাগ) এর ইউআরএল বান্ধব সংস্করণ, যা আমিও খুঁজছিলাম। এটি ডিফল্ট টেম্পলেট ( বিশ টেন ) দিয়ে পরীক্ষা করা হয়েছিল । আমি সত্যিই নিশ্চিত নই যে নীচে প্রদত্ত দুটি ভেরিয়েবলগুলি আমার সাইটে কাজ করে না। টিপ জন্য কেচprint_r() ধন্যবাদ ।

এখন, কেন এই তথ্য এত গভীরভাবে লুকানো আছে?


নাম ব্যবহারের জন্য: একক_পোস্ট_শব্দ ('', মিথ্যা); স্লাগ ব্যবহারের জন্য: get_query_var ('পৃষ্ঠার নাম');
jtmielczarek

উত্তর:


182

ওয়ার্ডপ্রেস গ্লোবাল ভেরিয়েবল $pagenameআপনার জন্য উপলব্ধ হওয়া উচিত। আপনার উল্লেখ করা একই সেটআপটি দিয়ে আমি কেবল চেষ্টা করেছি।

$pagenameফাংশনের ভিতরে ডাব্লুপি-অন্তর্ভুক্ত / থিম.এফপি ফাইলটিতে সংজ্ঞায়িত করা হয় get_page_template(), যা অবশ্যই আপনার পৃষ্ঠার থিম ফাইলগুলি বিশ্লেষণের আগে ডাকা হয়, সুতরাং এটি পৃষ্ঠাগুলির জন্য আপনার টেমপ্লেটের অভ্যন্তরের যে কোনও বিন্দুতে উপলব্ধ।

  • যদিও এটি নথিভুক্ত হয়েছে বলে মনে হচ্ছে না, আপনি $pagenameপারমলিংক ব্যবহার করলেই কেবল ভার সেট করা হয়। আমার অনুমান কারণ এটি কারণ আপনি যদি সেগুলি ব্যবহার না করেন তবে ওয়ার্ডপ্রেসটির পৃষ্ঠা স্লাগের প্রয়োজন নেই, তাই এটি সেট আপ করে না।

  • $pagename আপনি পৃষ্ঠাটি একটি স্থির সম্মুখ পৃষ্ঠা হিসাবে ব্যবহার না করে সেট করা নেই।

    • এটি /wp-includes/theme.php এর অভ্যন্তরে কোড যা আপনি $pagenameসেট করতে না পারলে সমাধানটি নির্দেশ করেছিলেন :

      $ পৃষ্ঠার নাম = get_query_var ('পৃষ্ঠার নাম'); যদি (! $ পৃষ্ঠার নাম && $ id> 0) {// যদি কোনও স্থির পৃষ্ঠাটি প্রথম পৃষ্ঠা হিসাবে সেট করা থাকে তবে $ পৃষ্ঠার নামটি সেট করা হবে না। এটিকে কোয়েরি করা অবজেক্ট $ post = qu wp_query-> get_queried_object () থেকে পুনরুদ্ধার করুন; $ পৃষ্ঠার নাম = $ পোস্ট-> পোস্ট_নাম; }


4
name পৃষ্ঠার নামটি শিরোনাম.পিএফপি ব্যবহার করার সময় খালি থাকে। আমি ডিফল্ট টেম্পলেট (বিশটি) ব্যবহার করার চেষ্টা করেছি এবং <body> ট্যাগের সাথে সাথেই এটি ব্যবহার করার চেষ্টা করেছি তবে সেট করা নেই। ঘটনাচক্রে, ক্যোয়ারী_ভার্সের ভেরিয়েবলগুলির কোনওটিই সেই পর্যায়ে সেট করা নেই বলে মনে হয়।
বার্নার্ড

1
আমি এই পরিবর্তনশীলটির অনুপস্থিতির কোনও কারণ দেখতে পাচ্ছি না, সম্ভবত আমি আপনার সেটআপটি ভুল বুঝেছি? আমি বুঝতে পেরেছি আপনি কোনও পৃষ্ঠার টেম্পলেটটির ভিতরে এটি করার চেষ্টা করছেন। এমনকি যদি আপনি শিরোনামের প্রথম লাইনে "প্রতিধ্বনি $ পৃষ্ঠার নাম" লিখে থাকেন তবে এটি আপনাকে মান দেয়। আপনি ডাব্লুপি এর কোন সংস্করণ নিয়ে কাজ করছেন?
এজেজে

1
আপনি get_query_var ('পেজ নাম') ব্যবহার করে কিছুটা ভিন্ন পদ্ধতির চেষ্টা করতে পারেন।
এজেজে

@ আজভেব: হ্যাঁ, এটি এমন একটি টেম্পলেট যা আমি তৈরি করছি তবে আমি হেডার.এফপি এর অভ্যন্তরে পরীক্ষার জন্য ডিফল্ট টেম্পলেট ব্যবহার করছি। আমি বুঝতে পারি যে আপনি নিজের সমাধানটি পরীক্ষা করেন নি। আপনি যখন শিরোনামে। Php এ <body> ট্যাগের ঠিক পরে <h1> <? পিএইচপি ইকো $ পৃষ্ঠার নাম?> </ 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
এটিও কাজ করে না। আমি <body> ট্যাগের ঠিক পরে যদি $ wp_query অবজেক্টটি মুদ্রণ করি তবে আমি দেখতে পাচ্ছি যে প্রথম পোস্ট অবজেক্টটি ব্লগ এন্ট্রি, পৃষ্ঠাটি নয়। তবে, মুদ্রণ_আর () টিপ জন্য ধন্যবাদ। আমি যে ভেরিয়েবলটি খুঁজছি তার সন্ধান করতে পারি যে তথ্যটি আমি খুঁজছি (এই তথ্যটি প্রশ্নটিতে রাখছি)।
বার্নার্ড

প্রতিধ্বনিত করে যে $ পৃষ্ঠা_শিরোনাম ভার আমার জন্য শিরোনামে কাজ করেছে, ধন্যবাদ।
ক্লেয়ার

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

এটি আমার পক্ষে কাজ করেছে।

যদি আমি সঠিকভাবে বুঝতে পারি তবে আপনি পৃষ্ঠার নামটি এমন একটি পৃষ্ঠায় পেতে চান যাতে পোস্ট এন্ট্রি রয়েছে।


10

আপনি বৈশ্বিক চলক সহ বর্তমান পৃষ্ঠা, পোস্ট বা কাস্টম পোস্টের ধরণটি পেতে পারেন $post:

echo $post->post_title

দ্রষ্টব্য: কোনও ফাংশন বা শ্রেণিতে আপনাকে global $post;ব্যবহারের চেষ্টা করার আগে নির্দিষ্ট করতে হবে $post

যদি আপনার পৃষ্ঠায় লুপ থাকে তবে নিশ্চিত হয়ে নিন যে আপনি প্রতিটি লুপটি ডিফল্ট আইটেমটি প্রদর্শিত হচ্ছে (পৃষ্ঠাটি) wp_reset_postdata();সেট করে রেখেছেন end$post

দ্রষ্টব্য, মেনু আইটেম এবং মিডিয়া সংযুক্তি সহ ... যে কোনও কাস্টম লুপ / ​​ক্যোয়ারির জন্য 'পোস্ট_টাইটেল' ভেরিয়েবলটি উপলভ্য ... ওয়ার্ডপ্রেসের সমস্ত কিছুই একটি 'পোস্ট'।


এই উত্তরটি ২০১২ সালের, এই পদ্ধতিটি আরও সাম্প্রতিক ডাব্লুপিপি দিয়ে কাজ করবে কিনা সে সম্পর্কে কোনও জ্ঞান আছে কি?
মার্টিন

1
হ্যাঁ এটি হবে — পোস্ট প্রকারের ডাব্লুপিপির মূল হ্যান্ডলিং পরিবর্তন হয়নি
জেমস

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, এটি বিভিন্ন পরিবর্তনশীল ফেরত পেতে টিউন করা যেতে পারে।


5

আমাদের কেবলমাত্র "পোস্ট" গ্লোবাল ভেরিয়েবল ব্যবহার করা দরকার:

global $post;
echo $post->post_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

মধ্যে ওয়ার্ডপ্রেস লুপ :

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 ('পেজ নেম') আমাকে কেবল পৃষ্ঠা স্লাগ দিচ্ছিল। সুতরাং উপরেরটি সমস্ত ড্যাশগুলি প্রতিস্থাপন করে এবং প্রতিটি শব্দের প্রথম অক্ষরকে বড় হাতের করে তোলে - সুতরাং এটি আসলে শিরোনাম হিসাবে ব্যবহার করা যেতে পারে।


0

এটিই আমি 2018 পর্যন্ত ব্যবহার করে শেষ করেছি:

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

0

আমি এখন ওয়ার্ডপ্রেস কোডকে এই ফাংশনটি পেয়েছি ,

জিজ্ঞাসা করা

যা একটি মোড়ক জন্য $wp_query->get_queried_object

এই পোস্টটি আমাকে সঠিক দিকে নিয়ে গেছে, তবে মনে হয় এটির এই আপডেটটি দরকার।


0

আপনি ফাংশন.ফ্পে থাকলে এটিও কাজ করে। আপনি বিশ্বব্যাপী অ্যারে ব্যবহার করতে হবে যেহেতু এটি সেরা পদ্ধতির নয়, তবে এটি কার্যকর হয়।

  1. প্রথমত, আমাদের একটি ফিল্টার যুক্ত করা দরকার। টেমপ্লেট_মিলক এর চেয়ে আরও ভাল ফিল্টার থাকতে হবে তবে আমি সেগুলি সব জানি না। দয়া করে আমাকে ডানদিকে দেখান।

    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()অন্য কোনও অংশে ফাংশন.এফপি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.