গতিশীলভাবে কোনও পৃষ্ঠার_তত্ত্ব () পরিবর্তন করুন


9

আমি এমন একটি প্লাগইন বিকাশ করছি যা কোনও কাস্টম পোস্ট ধরণের ব্যবহার করে না, তবে পৃথক ডাটাবেস সারণী। এটি এমন একটি প্লাগইন যা লিঙ্কগুলি সহ কোর্সের একটি তালিকা প্রদর্শন করে যা বিভিন্ন কোর্সের বিশদ পৃষ্ঠাগুলিতে নিয়ে যায়, যেখানে ব্যবহারকারী তখন কোনও কোর্সের জন্য সদস্যতা নিতে পারে।

বর্তমান অবস্থায়, আমি কাস্টম পৃষ্ঠার টেমপ্লেট (পৃষ্ঠা-পাঠ্যক্রম। পিএফপি) সহ একটি পৃষ্ঠায় প্লাগইনগুলি ডেটা পেতে একটি শর্টকোড ব্যবহার করছি।

the_title()প্লাগইনটি যে পৃষ্ঠাটি দেখায় সে অনুযায়ী আমি এখন গতিশীল পরিবর্তন করতে চাই (পাঠ্যক্রমের তালিকা, ফর্মগুলির সাথে অবশ্যই কোর্সের বিশদ পৃষ্ঠা, ফর্ম জমা দেওয়ার সাফল্য পৃষ্ঠা)। তবে যখনই আমি নীচের ফিল্টারটি দিয়ে এটি করি, পাদলেখের অন্যান্য পৃষ্ঠাগুলির লিঙ্কগুলিও পরিবর্তিত হয়:

<?php

add_filter('the_title', 'custom_page_title');
function custom_page_title() {
    return 'Custom Title';
}

সম্পাদন করা

ফুটার.এফপিতে আমার একটি ফাংশন রয়েছে wp_nav_menu()যাতে ফুটার লিঙ্কগুলি অন্তর্ভুক্ত থাকে তাই আমি তাদের উপস্থিতি> মেনুতে সংজ্ঞায়িত করতে পারি। তবে উপরের ফিল্টারটি সহ, পাদলেখের সমস্ত লিঙ্কগুলিও 'কাস্টম শিরোনাম' এ পরিবর্তিত হবে। তবে আমি কেবল পৃষ্ঠার শিরোনামটি পরিবর্তন করতে চাই, পাদলেখের মেনু লিঙ্কগুলিকে প্রভাবিত করে না।

শর্তযুক্ত ট্যাগ যুক্ত করার চেষ্টা করা in_the_loop()পাদলেখের লিঙ্কগুলি এখনও প্রভাবিত হয়, যদিও সেগুলি লুপে নেই।

<?php

add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
    if ( in_the_loop() ) {
        add_filter( 'the_title', 'custom_page_title' );
    }
}

function custom_page_title() {
    return 'Custom Title';
}

এটি এই প্রশ্নের অনুরূপ: এনএভি-তে শীর্ষস্থানীয় সমস্যাটি ফিল্টার করুন , কেবলমাত্র প্রভাবিত লিঙ্কগুলি ফুটারে রয়েছে এবং in_the_loop()কাজ করে না।

পাদলেখের লিঙ্কগুলিকে প্রভাবিত না করেthe_title() কেবলমাত্র বর্তমান পৃষ্ঠার শিরোনামকে প্রভাবিত করার সময় আমি কীভাবে পরিবর্তন করতে পারি ?

2 সম্পাদনা করুন - সমাধান

সুতরাং অবশেষে আমি এটি কাজ করেছিলাম:

<?php

add_action( 'loop_start', 'set_custom_title' );
function set_custom_title() {
    add_filter( 'the_title', 'wpse83525_filter_the_title', 10, 2 );
}

function wpse83525_filter_the_title( $title, $id ) {
    if ( 'page-listcourses.php' == get_post_meta( $id, '_wp_page_template', true ) ) {
        return 'Custom Title';
    }
    return $title;
}

ফাইল পৃষ্ঠা-তালিকাগুলি। পিএফপি হ'ল একটি কাস্টম পোস্ট টেম্পলেট যা আমি 'কোর্সেস' নামে স্থির পৃষ্ঠায় অর্পণ করেছি।

আমি ধরে নিয়েছি এটি এর আগে কার্যকর হয়নি কারণ কাস্টম পোস্ট টেম্পলেটটির স্থির পৃষ্ঠার নাম এবং ফাইলের নাম একই ছিল।


1
আপনি কেন নিজের ডাটাবেস টেবিল ঘূর্ণন করছেন? আপনি যদি কাস্টম পোস্টের ধরণ হিসাবে আপনার কাস্টম সামগ্রীটি প্রয়োগ করেন তবে আপনার জীবন অনেক সহজ হবে ।
চিপ বেনেট

আমি আসলে ভেবেছিলাম এই প্রশ্ন আসবে। আমি ওয়ার্ডপ্রেস জানার জন্য এই প্লাগইনটি বিকাশ করি, তাই আমি প্রথমে কাস্টম পোস্টের প্রকার সম্পর্কে জানতাম না। আমার কাছে দুটি ডাটাবেস টেবিল রয়েছে, একটি কোর্সের জন্য এবং একটি কোর্সের বিভাগের জন্য। একটি বিভাগে বেশ কয়েকটি কোর্স থাকতে পারে, সুতরাং দুটি টেবিল লিঙ্কযুক্ত। আমি কাস্টম পোস্ট প্রকারের সাথে এটি সম্পাদন করা এত সহজ বলে মনে করি না। অবশ্যই আমি কোর্সগুলির জন্য কাস্টম ট্যাক্সনোমিজ ব্যবহার করতে পারি, তবে আমাকে আরও ক্ষেত্র যুক্ত করতে হবে, কারণ একটি কোর্সের বিভাগের কেবল নাম নেই। কেবলমাত্র এখনই এটি কাস্টম ডাটাবেস টেবিলগুলির সাহায্যে করা অনেক সহজ।
Gchtr

1
আপনার ব্যবহারের ক্ষেত্রে হ'ল সঠিক, পছন্দসই ব্যবহারের ক্ষেত্রে কাস্টম পোস্ট প্রকার এবং কাস্টম ট্যাক্সনোমির জন্য। আপনি হতে পারে misunderestimating কমনীয়তা, নমনীয়তা ও CPTs এবং কাস্টম taxonomies শক্তি।
চিপ বেনেট

এটা সম্ভব যে আমি করি। আমার সম্ভবত চেষ্টা করা উচিত পরামর্শের জন্য ধন্যবাদ.
Gchtr

in_the_loop()trueযখনই the_post()বরখাস্ত করা হয় সেট করা হয় মূল দিকে খুব গভীরভাবে খনন না করে এবং এনএভি মেনুগুলি নিজেই লুপ বলে জেনে আমি অনুমান করছি যে পথে কোথাও কোথাও wp_nav_menu()লুপটি ইনস্ট্যান্ট করে দেয়, যার ফলে in_the_loop()ফিরে আসে true
চিপ বেনেট

উত্তর:


5

আমি is_page_template()শর্তযুক্ত ব্যবহার করব :

if ( is_page_template( 'page-courses.php' ) ) {
    // The current page uses your
    // custom page template;
    // do something
}

সম্পাদন করা

আপনি আপনার ফিল্টার কলব্যাকের ভিতরে এই শর্তযুক্ত ব্যবহার করবেন :

function wpse83525_filter_the_title( $title ) {
    if ( is_page_template( 'page-courses.php' ) ) {
        return 'Custom Title';
    }
    return $title;
}
add_filter( 'the_title', 'wpse83525_filter_the_title' );

এখন, পৃষ্ঠা আছে যেগুলি আপনার পৃষ্ঠা টেমপ্লেট ব্যবহার শুধুমাত্র শিরোনাম বিছিন্ন, আপনি অন্যান্য প্যারামিটার পাস সুবিধা গ্রহণ করতে পারেন the_title: $id। যেহেতু আপনি যে পোস্টটির জন্য শিরোনামটি ফিল্টার করা হচ্ছে তার আইডি জানেন, আপনি _wp_page_templateপোস্ট মেটাটি জিজ্ঞাসা করতে পারেন এবং নিশ্চিত করতে পারেন যে এটি আপনার পৃষ্ঠার টেমপ্লেটের সমান:

function wpse83525_filter_the_title( $title, $id ) {
    if ( 'page-courses.php' == get_post_meta( $id, '_wp_page_template', true ) ) {
        return 'Custom Title';
    }
    return $title;
}
add_filter( 'the_title', 'wpse83525_filter_the_title', 10, 2 );

সম্পাদনা 2

আপনি যদি "কোর্স" পৃষ্ঠাটি নির্দিষ্ট করে লক্ষ্যবস্তু করতে চান is_page()তবে পৃষ্ঠা স্লাগ 'courses'বা পৃষ্ঠার শিরোনামটি ব্যবহার করুন 'Courses':

function wpse83525_filter_the_title( $title ) {
    if ( is_page( 'Courses' ) ) {
        return 'Custom Title';
    }
    return $title;
}
add_filter( 'the_title', 'wpse83525_filter_the_title' );

যদিও, আমি page-courses.phpএকটি কাস্টম পৃষ্ঠা টেম্পলেটটিতে পরিবর্তনের পরামর্শ দেব যা এই পুরো প্রক্রিয়াটিকে আরও দৃ more় করে তুলবে।


এটি আপাতত কার্যকর হয়নি। তবে আমি আমার প্রশ্নটিকে পরিমার্জন করেছি, কারণ এটি যথেষ্ট নির্দিষ্ট নাও হতে পারে। সমস্যাটি অন্য কোথাও রয়েছে।
Gchtr

" এখনকার কাজ হয়নি " বলতে কী বোঝ ? আপনি ঠিক কি চেষ্টা করেছেন? আপনি কী হওয়ার প্রত্যাশা করেছিলেন, তা হয়নি বা অপ্রত্যাশিতভাবে কী ঘটেছিল?
চিপ বেনেট

আপডেট হওয়া উত্তরটি দেখুন, এটি এনএভি মেনু আইটেমের শিরোনামগুলিকে সম্বোধন করবে।
চিপ বেনেট

আমি বলেছিলাম যেহেতু আমি মনে করি আপনার উত্তরটি সঠিক হতে পারে (সঠিক দিকে এগিয়ে চলছে) তবে আমি সম্ভবত আমার প্রশ্নটি যথেষ্ট পরিষ্কার জিজ্ঞাসা করিনি। get_post_meta( $id, '_wp_page_template', true )ফিরে আসে defaultএবং আমি জানি না এটি দিয়ে কী করতে হবে। আমি যখন 'পেজ-কোর্স.এফপি' 'কে' ডিফল্ট 'তে সেট করি তখন সমস্ত ন্যাভ লিঙ্ক বদলে যায়, যখন আমি the_titleফিল্টারটি হুক করি না loop_start, কেবল তখনই পাদলেখ লিঙ্কগুলি পরিবর্তন হয়। কোন টেম্পলেট ফাইলটি ব্যবহার করা হয়েছে তা আমি পরীক্ষা করেছি এবং এটি 'পেজ-কোর্স.এফপি' এবং 'পেজ.এফপি' নয় (যা আমি ভেবেছিলাম ডিফল্ট হতে পারে)।
Gchtr

সুতরাং, "কোর্স" আপনার স্থির পৃষ্ঠার নাম?
চিপ বেনেট

1

আপনি যদি কেবলমাত্র বর্তমান পৃষ্ঠার শিরোনাম সম্পাদনা করতে চান তবে in_the_loop()শর্তসাপেক্ষে ব্যবহার করুন :

add_filter( 'the_title', 'modify_onpage_title', 10, 2);

function modify_onpage_title( $title , $id = null ) {

    if(!in_the_loop()){
        // returns early if not relevant (as in custom menu loops)
        return $title;
    }

    // Tweak your title
    $title = "Yolo! ". $title;
    return $title;
}


0

যদিও is_page_template()ইচ্ছা কাজ, আমি সব কোডটি একটি ফাইলে পৃষ্ঠার এই ধরনের উত্পন্ন আছে পৃষ্ঠা টেমপ্লেট নিজেই কোড এই ধরনের করা পছন্দ করে।


1
প্রশ্নটি কোড ব্যবহার করে এমন অনুমানের অধীনে কীভাবে এটি কাজ করবে the_title()? কোড উদাহরণ?
চিপ বেনেট

@ শিপবনেট, আমি প্রশ্নটি বুঝতে পারি না। যদি ফিল্টারটি কেবলমাত্র কোনও নির্দিষ্ট টেম্পলেটযুক্ত পৃষ্ঠার জন্য প্রয়োগ করতে হয় তবে তিনি কল করার আগে টেমপ্লেটে একই কোডটি রাখতে পারেন get_header()
মার্ক কাপলুন

হ্যাঁ, আসলে আমিও মনে করি এটি কার্যকর হবে। তবে, আমি মনে করি যে প্লাগইনে ক্যোয়ারী_ভার্সে কোনও ভেরিয়েবল সেট করতে আমাকে প্রদত্ত পথ নিতে হবে? আমার জন্য, ফিল্টারিং the_titleএকটি ভাল সমাধান।
Gchtr
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.