জানুয়ারী ২০১১-এর দুর্দান্ত ওয়ার্ডপ্রেস অ্যাডমিন মেনু চ্যালেঞ্জ (ওয়ার্ডপ্রেস অ্যাডমিন মেনু সিস্টেমটি সংশোধন করার সময় কিছু চ্যালেঞ্জগুলি কীভাবে সমাধান করবেন?)


14

এই প্রশ্নটি কিছুটা অনন্য।

এটি ট্র্যাকের টিকিটের সাথে সম্পর্কিত ওয়ার্ডপ্রেস দলকে ( বা অন্য যে কোনও ব্যক্তিকে ) আমি একটি "চ্যালেঞ্জ" প্রকাশ করছি : # 16048 , # 16050 এবং # 16204

লক্ষ

লক্ষ্যটি হ'ল ওয়ার্ডপ্রেস অ্যাডমিন মেনু বিভাগটি সংশোধন করার চেষ্টা করার সময় নীচের স্ক্রিনশটে চিত্রিত তিনটি (3) ইস্যুটি সম্পর্কে আলোচনা করা:

  1. অ্যাটর্নি সম্পাদনার সময় "মাইক্রোসাইট" সাবমেনু পৃষ্ঠাটি হাইলাইট করার জন্য পান (এর জন্য আমাদের কোনওভাবে সাবমেনু আইটেমটিতে "কারেন্ট" প্রয়োগ করতে সক্ষম হওয়া দরকার, _ এবং _wp_menu_output () ফাংশনে কিছু হুক এখানে প্রয়োজনীয় যা সরবরাহ করতে হবে) ,

  2. অ্যাটর্নি /wp-admin/edit.php?post_type=attorneyসম্পাদনা করার সময় অ্যাটর্নি মেনু পৃষ্ঠা লিঙ্কটি পান (এবং _wp_menu_output () ফাংশনে সেই একই প্রয়োজনীয় হুকগুলি এটি পরিচালনা করতে পারে) , এবং

  3. পান "Microsite" আরম্ভ না লিঙ্কটি একটি "আপনি এই পৃষ্ঠায় যাওয়ার জন্য যথেষ্ট অনুমতি নেই" ত্রুটি * (এই সমাধান করতে nastiest এক জন এবং প্রত্যেকটি হয় ফেরত মান এর উপর হুকuser_can_access_admin_page() এই সমস্যাটি সুন্দরভাবে হ্যান্ডেল পারে।)

দ্য গ্রেট ওয়ার্ডপ্রেস অ্যাডমিন মেনু চ্যালেঞ্জ ২০১১ এর স্ক্রিনশট 2011
(সূত্র: মাইকসচিনেল.কম )

শুধু আমার ব্যবহারের ক্ষেত্রে

এই তিনটি (3) ইস্যু আমার ব্যবহারের ক্ষেত্রে তবে এগুলি ওয়ার্ডপ্রেসে অ্যাডমিন মেনুগুলি কনফিগার করার সাথে সম্পর্কিত বিষয়গুলির প্রতীকী।

ওয়ার্ডপ্রেস দলের বেশ কয়েকজন বলেছিলেন যে এটি সহজ এবং এইভাবে বোঝানো হয়েছে যে আমি কিছু মিস করছি (যা সঠিক হতে পারে) তবে আমি এই সমস্যাটি কয়েক সপ্তাহ ধরে দেখেছি এবং কীভাবে এটি ঘটাবেন তা অনুধাবন করতে পারিনি যাতে আপনি নীচে দেখেন এমন প্লাগইন তৈরি করেছি ( গিস্ট থেকে ডাউনলোডযোগ্য ) সমস্যাগুলির সহজতম ব্যবহারের ক্ষেত্রে উদাহরণ হিসাবে। কোডটি admin_menu2()বরং হ্যাকিশ তবে ওয়ার্ডপ্রেসে অ্যাডমিন মেনুগুলিকে সংশোধন করার জন্য এটি প্রয়োজনীয়।

নোট করুন যে আমি 3.1- এ নতুন remove_menu_page()বা নতুন remove_submenu_page()ফাংশনগুলি ব্যবহার করার চেষ্টা করিনি কারণ প্লাগইন তৈরি করতে এটি বেশি সময় নিতে পারত - admin_menu2()একটি বিদ্যমান প্রকল্প থেকে আমার কাছে ইতিমধ্যে কোডটি ছিল - এবং আমি বিশ্বাস করি না যে তারা সম্বোধন করবে যাইহোক সমস্যা।

আমার কী দরকার?

আমার দুটি (২) জিনিসের একটি দরকার:

  1. আমি এই প্লাগইনটি দিয়ে যে সমস্যার সমাধান করব এবং এর সমাধান এবং এই প্রশ্নে এবং স্ক্রিনশটটিতে (বিটিডাব্লু, আপনি যদি ব্যবহার করেন তবে আমি আপনার সমাধানটিকে অযোগ্য ঘোষণা করব) কোনও অংশ সমাধান পিএইচপি আউটপুট বাফারিং ) , বা

  2. ওয়ার্ডপ্রেস টিমকে স্বীকৃতি দেওয়ার জন্য যে এই হুকগুলির সত্যই প্রয়োজন আছে এবং তাদের টিকিটে তাদের অবস্থানের বিষয়ে পুনর্বিবেচনা করাতে হবে।

আপনি কীভাবে চ্যালেঞ্জ গ্রহণ করবেন?

  1. ওয়ার্ডপ্রেস ৩.১ এর একটি নতুন নতুন কপি ডাউনলোড এবং ইনস্টল করুন (কোনও সংশোধন সম্ভবত এটি করবে) ,

  2. নীচে "দ্য গ্রেট ওয়ার্ডপ্রেস অ্যাডমিন মেনু চ্যালেঞ্জ অফ জানুয়ারী 2011" প্লাগইনটি ডাউনলোড করুন, ইনস্টল করুন এবং সক্রিয় করুন (অথবা জিস্ট থেকে প্লাগইন ডাউনলোড করুন ) এবং তারপরে

  3. এই প্লাগইনটির জন্য প্লাগইন পৃষ্ঠায় প্রাপ্ত নির্দেশাবলী অনুসরণ করুন (নীচের স্ক্রিনশটটি দেখুন) তবে মূলত আপনি উপরে দেখানো স্ক্রিনশটটি লোড করুন এবং তারপরে বর্ণিত তিনটি (3) সমস্যা বের করার চেষ্টা করুন:

"দ্য গ্রেট ওয়ার্ডপ্রেস অ্যাডমিন মেনু চ্যালেঞ্জ অফ জানুয়ারী" এর প্লাগইন নির্দেশাবলীর স্ক্রিনশট
(সূত্র: মাইকসচিনেল.কম )

ওয়ান রে অফ হোপ

ভাগ্যক্রমে ওয়ার্ডপ্রেস দলের অ্যান্ড্রু নাকিন একবার এটিকে দেখার জন্য প্রস্তাব দিয়েছিলেন যাতে আমি এটি কোড করে ফেলেছিলাম তাই আমি প্রাথমিকভাবে এখানে পর্যালোচনা করতে এবং মন্তব্য করার পাশাপাশি অন্যদের মন্তব্য করার জন্য এখানে পোস্ট করছি। আমি জানি যে তিনি ব্যস্ত আছেন তবে আমি আশা করি যে তিনি (বা এমনকি আপনি) এই প্লাগইনটি v3.1 এর মূল ইনস্টলটিতে ইনস্টল করতে সময় নিতে পারেন এবং দেখুন যে তিনি সমস্যার সমাধান করতে পারেন কিনা।

আপনি যদি সম্মত হন তবে চ্যালেঞ্জটি কি অসম্ভব?

যদি এই চ্যালেঞ্জটি চেষ্টা করার পরে আপনি আমার মতো একই উপসংহারে পৌঁছে যান এবং আপনি যদি ওয়ার্ডপ্রেস অ্যাডমিন মেনুগুলি আরও কনফিগারযোগ্য হতে চান তবে দয়া করে এই ট্র্যাকের টিকিটগুলিতে মন্তব্য করুন ( # 16048 - # 16050 - # 16204 ) এবং এই প্রশ্নটি আপ করুন এটির জন্য সমর্থন দেখাতে।

আমি গ্ল্যাডলি এডমিট আই মিস মিস কিছু, যদি আমি করি

অবশ্যই এটি সম্ভব যে আমি এতে সম্পূর্ণ মস্তিষ্কে মরে যেতে পারি এবং কেউ কীভাবে এটি করতে হয় তা নির্দেশ করতে পারে। প্রকৃতপক্ষে, আমি সত্যিই আশা করি এটি শেষ হয়ে যায়; আমি বরং ভুল হতে পারি এবং তদ্বিপরীত থেকে এই কাজ করতে হবে।

এবং এখানে প্লাগইন

আপনি জিস্ট থেকে ডাউনলোড করতে পারবেন :

<?php
/*
Plugin Name: The Great WordPress Admin Menu Challenge of Jan 2011
Description: <em>"The Great WordPress Admin Menu Challenge of Jan 2011"</em> was inspired by the WordPress team's apparent lack of understanding of the problems addressed by trac tickets <a href="http://core.trac.wordpress.org/ticket/16048">#16048</a> and <a href="http://core.trac.wordpress.org/ticket/16050">#16050</a> <em>(See also: <a href="http://core.trac.wordpress.org/ticket/16204">#16204</a>)</em> and suggestion that the <a href="http://wordpress.org/extend/plugins/admin-menu-editor/>Admin Menu Editor</a> plugin handles the use-cases that the tickets address. Debate spilled over onto Twitter with participation from <a href="http://twitter.com/nacin">@nacin</a>, <a href="http://twitter.com/aaronjorbin">@aaronjorbin</a>, <a href="http://twitter.com/petemall">@petemall</a>, <a href="http://twitter.com/westi">@westi</a>, <a href="http://twitter.com/janeforshort">@janeforshort</a>, <a href="http://twitter.com/PatchesWelcome">@PatchesWelcome</a>; supportive comments from <a href="http://twitter.com/ramsey">@ramsey</a>, <a href="http://twitter.com/brianlayman">@brianlayman</a>, <a href="http://twitter.com/TheLeggett">@TheLeggett</a>, a retweeting of @nacin's simple yet <em>(AFAICT)</em> insufficient solution by <a href="http://twitter.com/vbakaitis">@vbakaitis</a>, <a href="http://twitter.com/Viper007Bond">@Viper007Bond</a>, <a href="http://twitter.com/nickopris">@nickopris</a>, <a href="http://twitter.com/Trademark">@Trademark</a>, <a href="http://twitter.com/favstar_pop">@favstar_pop</a>, <a href="http://twitter.com/designsimply">@designsimply</a>, <a href="http://twitter.com/darylkoop">@darylkoop</a>, <a href="http://twitter.com/iamjohnford">@iamjohnford</a>, <a href="http://twitter.com/markjaquith">@markjaquith</a>, <a href="http://twitter.com/JohnJamesJacoby">@JohnJamesJacoby</a> and <a href="http://twitter.com/dd32">@dd32</a>. Also see <a href="http://andrewnacin.com/2010/12/20/better-admin-menu-controls-custom-post-types-wordpress-3-1/#comment-6360">comments</a> on @nacin's blog post entitled "<em>Better admin menu handling for post types in WordPress 3.1</em>." <strong>The desired goal of the <em>"challenge"</em></strong> is to simply either to find a solution that has eluded me or, to get those who are dismissing it as solvable without added hooks in WordPress to have a tangible example to explore in hopes they will recognize that there is indeed a need for at least some of the requested hooks. <strong>There are three (3) steps to the challenge:</strong> 1.) Get the "Microsite" submenu page to be highlighted when editing an Attorney, 2.) Get the Attorney Menu Page link to link <a href="/wordpress//wp-admin/edit.php?post_type=attorney">here</a>  when editing an Attorney, and 3.) Get the "Microsite" link not to trigger a "You do not have sufficient permissions to access this page" error.  Here is <a href="https://mikeschinkel.com/websnaps/skitched-20110114-235302.png" target="_blank"><strong>a screenshot</strong> that attempts to illustrate the callenge</a>. The code can be found on gist <a href="https://gist.github.com/780709"><strong>here</strong></a>. Activate it as a plugin in a WordPress 3.1 install and go <a href="/wordpress//wp-admin/post.php?post=10&action=edit"><strong>here</strong></a> to see what the screenshot illustrates. <strong>Be sure to load the <a href="https://mikeschinkel.com/websnaps/skitched-20110114-235302.png" target="_blank">screenshot</a> in another browser tab or window first</strong>.
Author:      Mike Schinkel
Author URI:  http://about.me/mikeschinkel
Plugin URI:  https://gist.github.com/780709
*/
if (!class_exists('TheGreatWordPressAdminMenuChallenge')) {
  class TheGreatWordPressAdminMenuChallenge {
    static function on_load() {
      add_action('init',array(__CLASS__,'init'));
      add_action('admin_menu',array(__CLASS__,'admin_menu1'));      // Simulates generic "Microsite" plugin
      add_action('admin_menu',array(__CLASS__,'admin_menu2'),100);  // Simulates website-specific plugin
      add_action('post_row_actions',array(__CLASS__,'post_row_actions'),10,2);
    }
    static function post_row_actions($actions,$post) {
      $url = admin_url(self::this_microsite_url($post->ID));
      $actions = array_merge(array('microsite'=>"<a href=\"{$url}\" title=\"Manage this Microsite\">Microsite</a>"),$actions);
      return $actions;
    }
    static function the_microsite_editor() {
      echo "We are in the Microsite Editor for " . self::post_title();
    }
    static function admin_menu1() {
      if (self::this_post_id() && in_array(self::this_post_type(),array('attorney','practice_area'))) {
        add_submenu_page(
          self::this_parent_slug(),
          self::microsite_page_title(),
          self::microsite_page_title(),
          $capability = 'edit_posts',
          'microsite',
          array($microsite,'the_microsite_editor')
        );
        global $wp_post_types;
        $parent_type_meta = $wp_post_types[self::this_post_type()];
        global $menu;
        $slug = false;
        foreach($menu as $index => $menu_page)
          if ($menu_page[0]===$parent_type_meta->label) {
            $slug = $menu_page[2];
            break;
          }
        if ($slug) {
          global $pagenow;
          global $submenu;
          // Setting this makes gives the link to the microsite in the menu the highlight for "current" menu option
          global $submenu_file;
          $submenu_file = self::this_microsite_url();
          $index = end(array_keys($submenu[$slug]));
          $submenu[$slug][$index][12] = $submenu_file;
        }
      }
    }
    static function this_parent_slug() {
      return "edit.php?post_type=" . self::this_post_type();
    }
    static function post_title() {
      $post_id = self::this_post_id();
      return ($post_id ? get_post($post_id)->post_title : false);
    }
    static function microsite_page_title() {
      return 'Microsite for ' . self::post_title();
    }
    static function this_post_type($get_post=true) {
      $post_type = (isset($_GET['post_type']) ? $_GET['post_type'] : false);
      if (!$post_type && $get_post) {
        $post_id = self::this_post_id();
        $post_type = get_post($post_id)->post_type;
      }
      return $post_type;
    }
    static function this_post_id() {
      $post_id = false;
      $post_type = self::this_post_type(false);
      if (isset($_GET[$post_type]))
        $post_id = intval($_GET[$post_type]);
      else if (isset($_GET['post']))
        $post_id = intval($_GET['post']);
      return $post_id;
    }
    static function this_microsite_url($post_id=false) {
      $post_type = self::this_post_type();
      $post_id = $post_id ? intval($post_id) : self::this_post_id();
      return "edit.php?post_type={$post_type}&page=microsite&attorney={$post_id}";
    }
    static function admin_menu2() {
      // The code required for this is super, nasty, ugly and shouldn't be, but at least it *is* doable
      global $menu;
      global $submenu;
      global $microsite;

      $parent_type = self::this_post_type();
      foreach(array('attorney','practice_area') as $post_type) {
        $slug = "edit.php?post_type={$post_type}";
        if ($post_type==$parent_type) {  // If a microsite remove everything except the microsite editor
          $microsite_url = self::this_microsite_url();
          foreach($submenu[$slug] as $submenu_index => $submenu_page) {
            if ($submenu_page[2]!=$microsite_url) {
              unset($submenu[$slug][$submenu_index]);
            }
          }
        } else {
          $submenu[$slug] = array();
        }
      }

       // Remove the Submenus for each menu
      unset($submenu['index.php']);
      unset($submenu['edit.php?post_type=article']);
      unset($submenu['edit.php?post_type=event']);
      unset($submenu['edit.php?post_type=case_study']);
      unset($submenu['edit.php?post_type=news_item']);
      unset($submenu['edit.php?post_type=transaction']);
      unset($submenu['edit.php?post_type=page']);
      unset($submenu['upload.php']);

      unset($submenu['users.php'][13]); // Removed the "Add New"

      $remove = array_flip(array(
        'edit.php',
        'link-manager.php',
        'edit-comments.php',
        'edit.php?post_type=microsite-page',
      ));
      if (!current_user_can('manage_tools'))
        $remove['tools.php'] = count($remove);

      foreach($menu as $index => $menu_page) {
        if (isset($remove[$menu_page[2]])) {
          unset($submenu[$menu_page[2]]);
          unset($menu[$index]);
        }
      }

      $move = array(
        'edit.php?post_type=page' => array( 'move-to' => 35,  0 => 'Other Pages' ),
        'separator2' => array( 'move-to' => 40 ),
        'upload.php' => array( 'move-to' => 50, 0 => 'Media Library' ),
      );
      $add = array();
      foreach($menu as $index => $menu_page) {
        if (isset($move[$menu_page[2]])) {
          foreach($move[$menu_page[2]] as $value_index => $value) {
            if ($value_index==='move-to') {
              $move_to = $value;
            } else {
              $menu_page[$value_index] = $value;
            }
          }
          $add[$move_to] = $menu_page;
          unset($menu[$index]);
        }
      }
      foreach($add as $index => $value)
        $menu[$index] = $value;

      add_menu_page(
        'Attorney Positions',
        'Attorney Positions',
        'edit_posts',
        'edit-tags.php?taxonomy=attorney-position&amp;post_type=attorney',
        false,
        false,
        55);

      ksort($menu); // Need to sort or it doesn't come out right.
    }
    static function init() {
      register_post_type('attorney',array(
        'label'           => 'Attorneys',
        'public'          => true,
      ));
      register_post_type('practice_area',array(
        'label'           => 'Practice Areas',
        'public'          => true,
      ));
      register_taxonomy('attorney-position','attorney',array(
        'label'=>'Attorney Positions',
      ));
      register_post_type('article',array(
        'label'           => 'Articles & Presentations',
        'public'          => true,
      ));
      register_post_type('case_study',array(
        'label'           => 'Case Studies',
        'public'          => true,
      ));
      register_post_type('news_item',array(
        'label'           => 'Firm News',
        'public'          => true,
      ));
      register_post_type('event',array(
        'label'           => 'Events',
        'public'          => true,
      ));
      register_post_type('transaction',array(
        'label'           => 'Transactions',
        'public'          => true,
      ));

      // Install the test data
      $post_id = 10;
      $attorney = get_post($post_id);
      if (!$attorney) {
        global $wpdb;
        $wpdb->insert($wpdb->posts,array(
          'ID' => $post_id,
          'post_title' => 'John Smith',
          'post_type' => 'attorney',
          'post_content' => 'This is a post about the Attorney John Smith.',
          'post_status' => 'publish',
          'post_author' => 1,
        ));
      }
    }
  }
  TheGreatWordPressAdminMenuChallenge::on_load();
}

যারা এটি পড়েছেন তাদের সকলের কাছে আমি সত্যিই আশা করছি আপনি সাহায্য করতে পারেন।

আগাম ধন্যবাদ.


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

আপনি মাইকের বিষয়ে ঠিক যে সমস্যার কথা বলছেন তা আমি জানি, আমি মনে করি না যে এটির তুলনায় আমি এটির চেয়ে ভাল কোনও বর্ণনা করতে পারি, তবে অ্যাডমিনের (মজাদার জন্য) ড্রপডাউন মেনু লেখার সময় আমি একই সমস্যাগুলি দেখেছি আমার +1
t31os

@ t310s - আপনার +1 যোগ করার জন্য ধন্যবাদ। সমস্যাটি বর্ণনা করতে সক্ষম হতে আমার কাছে সম্ভবত 2 সপ্তাহের গবেষণা লেগেছে, যাতে আপনি এটির প্রাসঙ্গিক (এবং আমার কাছে থাকা 2 সপ্তাহও ব্যয় করেনি) এমনকি আপনি বুঝতে পারবেন যে আপনি এই ক্ষেত্রে বেশিরভাগের চেয়ে এগিয়ে রয়েছেন আমাকে!
মাইকচিন্কেল

উত্তর:


2

মাইক, আমি কোড এবং আপনার আদর্শ শেষ ব্যবহারের কেসটি একবার দেখেছি ... এবং তাদের কয়েকটি, সত্যি বলতে, বর্তমান সিস্টেমের সাথে সম্ভব নয়। আবার, আপনার প্রয়োজনীয়তা:

  1. অ্যাটর্নি সম্পাদনার সময় "মাইক্রোসাইট" সাবমেনু পৃষ্ঠাটি হাইলাইট করার জন্য পান
  2. অ্যাটর্নি /wp-admin/edit.php?post_type=attorneyসম্পাদনা করার সময় লিঙ্ক করতে অ্যাটর্নি মেনু পৃষ্ঠা লিঙ্ক পান
  3. "মাইক্রোসাইট" লিঙ্কটি ট্রিগার না করার জন্য "এই পৃষ্ঠাটি অ্যাক্সেস করার জন্য আপনার কাছে পর্যাপ্ত অনুমতি নেই" ত্রুটি পান

এবং এখানে মূল সমস্যাটি # 2।

আমি কি চেষ্টা করেছি

আমি অ্যাটর্নিদের জন্য একটি কাস্টম পোস্ট প্রকার যুক্ত করার চেষ্টা করেছি এবং অবিলম্বে মনে করিয়ে দেওয়া হয়েছিল যে /wp-admin/edit.php?post_type=attorneyআপনাকে অ্যাটর্নিগুলির একটি তালিকা দেবে , প্রকৃত সম্পাদনা স্ক্রিনটি নয়। আসল সম্পাদনা চলছে/wp-admin/post.php?post=10&action=edit । সুতরাং আপনি যদি সত্যিই # 2 এর সাথে আবদ্ধ হন ... অন্য দুটি মানদণ্ড কাজ করবে না।

এই কারণেই # 3 বাস্তবায়নে ব্যর্থ হয় ... এবং আমি # 1 চেষ্টা করতেও সক্ষম হইনি কারণ আমি এতদূর পেতে পারি নি।


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

2

আরে মাইক, আপনার সমস্যা # 3 আপনার নির্দিষ্ট করার কারণে ($microsite, 'the_microsite_editor'), এটি কোথায় হওয়া উচিত (__CLASS__, 'the_microsite_editor')

আপডেট: আমার নিজের প্লাগইনটির জন্য অনুরূপ কিছু সমস্যা সমাধানের চেষ্টা করার জন্য অনেক বেশি সময় ব্যয় করার পরে, আমি এখানে এমন কিছু জিনিস পেয়েছি যা আপনার চ্যালেঞ্জের সাথে সহায়তা করতে পারে (নোট করুন যে ফাংশনগুলি আপনার শ্রেণীর নীচে রয়েছে):

function add_posttype_submenu_page($mytype, $label, $cap, $slug) {  
    /* we add two submenu pages to work around the 
       edit.php?post_type=...&page=...problem and have 
       our page called as admin.php?page=... instead */
    //first create a 'blind' pseudo-entry to register our page callback
    add_submenu_page($mytype, $label, $label, $cap, $slug, 
                     array( &$this, 'admin_'.$mytype ));
    //then create a real entry that 'calls' our pseudo-entry
    add_submenu_page('edit.php?post_type='.$mytype, $label, 
                     $label, $cap, 'admin.php?page='.$slug);
    /* then lets fix/hack the highlighting */
    global $plugin_page;
    global $submenu_file;
    if ($plugin_page == $slug) {
        // this next line highlights the submenu entry
        $submenu_file = 'admin.php?page='.$slug; 
        add_filter('parent_file', 
                   array(&$this, 'evil_parent_file_hack'));
    }
} 

function evil_parent_file_hack() {
    //we do this to get the parent menu properly highlighted, too
    //it only gets called on the submenu menu page in question
    global $self;
    global $parent_file;
    $self = $parent_file;
    remove_filter('parent_file', array(&$this, 'evil_parent_file_hack'));
}

তারপরে আপনি কেবল add_posttype_submenu_page()সেই পরামিতিগুলির সাথে কল করবেন । এটি register_post_type()কল করার সময় স্বয়ংক্রিয়ভাবে তৈরি মেনুতে সাবমেনু আইটেমটি সঠিকভাবে যুক্ত করা উচিত ।


ওহো ... CLASS এর আশেপাশের ডাবল আন্ডারস্কোরগুলি বোল্ড ফর্ম্যাটিংয়ে রূপান্তরিত হয়েছিল ;-)
wyrfel

আমি এটা ঠিক করেছি. :)
ফুসিয়া

ওহ, এটি কেবল দুর্দান্ত; ধন্যবাদ! আমি কিভাবে প্রথম পয়েন্ট মিস করতে পারে?!? ডোহ!
মাইকচিনকেল

ধন্যবাদ, মাইক আপনার মূল বিষয়ে ফিরে যান ... ডাব্লুপি অভ্যন্তরীণভাবে কিছু মেনু প্রবেশের জন্য একটি আইডি উত্পন্ন করে মেনু অ্যারেগুলির 4 মান হিসাবে সংরক্ষণ করে in যেমন প্লাগইন-পৃষ্ঠা-হুকস। তবে কাস্টম পোস্ট টাইপের জন্য এটি এমন একটি আইডি সঞ্চয় করে যা প্লাগইন-পৃষ্ঠা-হুক ফর্ম্যাটের সাথে সঙ্গতিপূর্ণ নয়। আমি মনে করি যদি ডাব্লুপিপি এই ধারাবাহিকতা তৈরি করে (অর্থাত্ সকলের জন্য পৃষ্ঠার হুক তৈরি করে এবং 'প্যারেন্ট স্লাগ / ফাইল' এর মাধ্যমে
সাবমেনাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.