কোনও ওয়ার্ডপ্রেস মেনুতে কাস্টম পোস্ট ধরণের সংরক্ষণাগার যুক্ত করা


10

ওয়ার্ডপ্রেসের একটি মেনুতে কাস্টম পোস্ট টাইপ সংরক্ষণাগার যুক্ত করার কোনও উপায় আছে (কাস্টম লিঙ্ক যুক্ত করার পাশাপাশি)? যদি এটি কোনও কাস্টম লিঙ্ক ব্যবহার করে যুক্ত করা হয় (উদাঃ / সিপিটি-আর্কাইভ-স্লাগ /), ওয়ার্ডপ্রেস current-menu-itemতালিকার তালিকার মতো ক্লাস প্রয়োগ করে না , যা মেনু স্টাইল করার সময় চ্যালেঞ্জগুলি উপস্থাপন করে।

যদি কাস্টম লিঙ্কটিতে পুরো ইউআরএল থাকে (উদাঃ http://site.com/cpt-archive-slug/ ), সেই শ্রেণিগুলি যুক্ত করা হয়। তবে এটি সম্ভবত 'সেরা অনুশীলন' নয়।

উত্তর:


5

আপনার সেরা অপশনটি সম্পূর্ণ ইউআরএলের সাথে কাস্টম লিঙ্ক হিসাবে কাস্টম পোস্ট প্রকারের সংরক্ষণাগারগুলি হ'ল বিভিন্ন ফর্মের করণীয় ভিত্তিক সংরক্ষণাগার (বিভাগ, ট্যাগগুলি, কোনও কাস্টম শ্রেণিবিন্যাস) এবং তারিখ ভিত্তিক সংরক্ষণাগার যার নিজস্ব সংরক্ষণাগার স্লাগ রয়েছে।


6

আমি জানি এটি পুরানো তবে আমারও এই সমস্যাটি রয়েছে এবং আমি এটি হ্যান্ডেল করার একটি পরিষ্কার উপায় খুঁজে পেয়েছি কাস্টম মেনু ওয়াকার ব্যবহার করা

class KB_Custom_Menu_Walker extends Walker_Nav_Menu {

  protected static $custom_post_types = array();

  public function start_el(&$output, $item, $depth=0, $args=array(), $id=0) {
    if (isset( self::$custom_post_types[ $item->url ] )) {
      $item->url = get_post_type_archive_link( self::$custom_post_types[$item->url] );
    }
    parent::start_el($output, $item, $depth, $args, $id);
  }

  public static function custom_post_types($type=null) {
    if ($type) {
      self::$custom_post_types[ '#post_type_'.$type ] = $type;
    }
    return self::$custom_post_types;
  }
}

এর ইউআরএল সহ একটি কাস্টম লিঙ্ক মেনু আইটেম রয়েছে #post_type_album, আপনি এটি এটি ব্যবহার করতে পারেন:

# Where you defined your custom post type (could be anywhere anyway)
KB_Custom_Menu_Walker::custom_post_types('album');

# And display the menu
wp_nav_menu(array(
  'theme_location' => 'primary-nav',
  'walker' => new KB_Custom_Menu_Walker(),
));

দ্রষ্টব্য: এটি ধরে নেওয়া হয় যে আপনার পোস্টের ধরণের স্লাগ এবং নাম একই।


দেরী মানের উত্তরের জন্য +1। এটি সম্প্রদায়ের পক্ষে ভাল!
ব্রায়ান ফেগটার

2

সেই পদ্ধতির সাথে আরও উদারতা দেওয়ার জন্য আমি টুংডের উত্তরে কিছুটা প্রসারিত করেছি । এই প্রয়োগটি মেনু 'ম্যাক্রোস' এবং অভ্যন্তরীণ ওয়ার্ডপ্রেস ইউআরএলগুলির মধ্যে স্বেচ্ছাসেবী ম্যাপিং যোগ করার অনুমতি দেয় যা কেবলমাত্র ব্যাকএন্ড সম্পর্কে জানে।

!নামযুক্ত অ্যাঙ্করগুলির সাথে সংঘর্ষ এড়াতে আমি এই ম্যাক্রোগুলির উপসর্গ হিসাবে ব্যবহার করার সিদ্ধান্ত নিয়েছি - এর মধ্যে লিঙ্ক ইউআরএল থেকে 'http: //' কেটে ফেলার জন্য একটি ওভারহেড অন্তর্ভুক্ত রয়েছে (ওয়ার্ডপ্রেস এই অদ্ভুত লিঙ্কগুলি স্বাভাবিক করার চেষ্টা করবে) । যদি সেই বাস্তবায়ন আপনাকে বিরক্ত করে, আপনি সর্বদা preg_replace()কলটি সরিয়ে ফেলতে পারেন এবং #আগের মতো আপনার লিঙ্ক উপসর্গ হিসাবে ব্যবহার করতে পারেন ।

class Extendable_Menu_Walker extends Walker_Nav_Menu
{
    protected static $custom_urls = array();

    public static function setupUrls()
    {
        // calls to self::mapPostType($postTypeName) and 
        // self::createMapping($wildcard, $url) go here...
    }

    public function start_el(&$output, $item, $depth=0, $args=array(), $id=0)
    {
        $url = preg_replace('@^https?://@', '', $item->url);
        if (isset( self::$custom_urls[ $url ] )) {
            $item->url = self::$custom_urls[ $url ];
        }
        parent::start_el($output, $item, $depth, $args, $id);
    }

    public static function createMapping($urlKey, $realUrl)
    {
        self::$custom_urls['!' . $urlKey] = $realUrl;
    }

    public static function mapPostType($type)
    {
        self::createMapping('post_type_' . $type, get_post_type_archive_link($type));
    }
}

add_action('init', array('Extendable_Menu_Walker', 'setupUrls'));

1

আপনি একটি পৃষ্ঠা তৈরি করতে পারেন এবং তারপরে এটিতে একটি কাস্টম সংরক্ষণাগার টেম্পলেট প্রয়োগ করতে পারেন। আমি সংরক্ষণাগারটি তৈরি করতে এবং ব্যবহার করি - {পোস্ট-টাইপ}। Php টেম্পলেটটির নাম যেমন আপনি ডিফল্ট সংরক্ষণাগারটির জন্য করেন, ঠিক তেমনভাবে আমি পৃষ্ঠাতে এটি প্রয়োগ করি।

আপনি যদি এটি করেন তবে আমি আপনার সিপিটি হ্যাশ_আরচিভ = 'মিথ্যা' এ সেট করার পরামর্শ দিচ্ছি যাতে পারমিলিংকের সংঘর্ষ এড়াতে আপনার সিপিটি সংরক্ষণাগার স্লাগ সেট হওয়ার চেয়ে আপনার পৃষ্ঠায় আলাদা পারমালিনিক স্লাগ রয়েছে।


1

আমি একই সঠিক সমস্যার মধ্যে দৌড়েছি এবং এই সমাধানটি পেয়েছি:

// $menu is the menu as a string 
if ( check if youa re on the page you are looking for )
    $menu = str_replace( '<li class="menu-item"><a href="http://bla.com/bloop/">', '<li class="current-menu-item menu-item"><a href="http://bla.com/bloop/">'>, $menu );  

সূত্র: http://www.wptavern.com/forum/plugins-hacks/2169-current-page-custom-post-type-archive.html


0

আমি মনে করি আমাকে একটি নতুন "প্যারেন্ট" পোস্ট টাইপ তৈরি করতে হবে, তাই আমি যে কাস্টম-পোস্ট-টাইপটি দেখাতে চাই তা একটি "শিশু" হয়ে যায় এবং সেই পিতামাতাকে মেনুতে তালিকাভুক্ত করা হবে।

এটি একটি বিকল্প হওয়া উচিত। ডামি পিতামাতাকে কেবল মেনুতে তালিকাভুক্ত করার জন্য তৈরি করা খুব বেশি কাজ।

আমি টেমপ্লেট বা ফাংশনগুলি থেকে এটি করার একটি উপায় চাই, সুতরাং আমার মাল্টিসাইট ইনস্টলের প্রতিটি সাইটের জন্য প্রতিটি মেনু সেটিংসে এটি করতে হবে না।


1
আমি বলতে চাইছিলাম, মেনুতে আমি যে কাস্টম-পোস্ট-টাইপ পোস্টগুলি দেখাতে চেয়েছিলাম তা হ'ল নতুন নির্মিত পিতা-মাতার একমাত্র উপ-প্রকার, এবং আমি আশা করি এটি মেনু সেটিংসে পিতামাতার অধীনে তালিকাভুক্ত হয়েছে।
সার্জিও

0

অনুরূপ সমস্যা অনুসন্ধান করার সময় আমি এই উত্তরটি পেয়েছি। আমি কোডটি আমার ফিনেকশনস.এফপি ফাইলে স্রেফ অনুলিপি করেছি এবং এটি বাক্সের ঠিক বাইরে কাজ করেছে :) আশা করি এটি সাহায্য করে!

কাস্টম পোস্ট ধরণের জন্য গতিশীল নেভিগেশন (পৃষ্ঠা)


0

লিঙ্কটি যুক্ত করার পরিবর্তে আমি যা করি তা একটি খালি পৃষ্ঠা তৈরি করছে। সেই পৃষ্ঠাটিতে আমি সম্পাদকটিতে "সিপিটি-নাম থেকে উত্পন্ন সামগ্রী" এর মতো কিছু যুক্ত করি যাতে আমার ক্লায়েন্ট জানে যে সমস্ত জিনিস কোথা থেকে আসছে।

তারপরে আমি সেই পৃষ্ঠাটি মেনুতে যুক্ত করব এবং নিম্নলিখিত কোডের সাথে আমি সংরক্ষণাগার-সিপিটি বা একক-সিপিটি চলমান অবস্থায় হাইলাইট হওয়ার বিষয়টি নিশ্চিত করি।

/**
 * Fix to add Custom post types to nav menu
 * If you custom post is called "concepts"
 * create a new empty page called concepts and add this
 */
 function additional_active_item_classes($classes = array(), $menu_item = false){
    global $wp_query;


    if(in_array('current-menu-item', $menu_item->classes)){
        $classes[] = 'current-menu-item';
    }

    if ( $menu_item->title == 'PAGE TITLE' && is_post_type_archive('cpt-slug') ) {
        $classes[] = 'current-menu-item';
    }

    if ( $menu_item->title == 'PAGE TITLE' && is_singular('cpt-slug') ) {
        $classes[] = 'current-menu-item';
    }


    return $classes;
}
add_filter( 'nav_menu_css_class', 'additional_active_item_classes', 10, 2 );

এটি মেনু / পৃষ্ঠার শিরোনাম এবং যদি আমরা প্রকৃতপক্ষে কোনও কাস্টম পোস্ট ধরণের আর্কাইভ বা স্বতন্ত্র পৃষ্ঠাটি দেখছি তবে তা পরীক্ষা করবে। যদি এটি সত্য হয় তবে এটি বর্তমান-মেনু-আইটেম শ্রেণিটি যুক্ত করবে।

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