অ্যাডমিন মেনু বিভাগগুলির ক্রম পরিবর্তন করছেন?


31

কোনও ভাগ্য ছাড়াই মোটামুটি সহজ কাজটি করার জন্য কয়েক ঘন্টা ব্যয় করার পরে আমি কিছুটা হতাশ হয়ে পড়ছি।

মূলত আমার 5 টি কাস্টম পোস্ট প্রকার রয়েছে যা আমি তৈরি করেছি এবং আমি যা করতে চাই তা হ'ল তাদের প্রত্যেককে সরাসরি "ড্যাশবোর্ড" এর অধীনে একটি নির্দিষ্ট ক্রমে দেখানো ।

ওয়ার্ডপ্রেস ডকুমেন্টেশন থেকে মনে হয় আপনি সত্যিই এটি করতে পারবেন না কারণ সর্বাধিক মেনু অর্ডারটি "5" বলে মনে হচ্ছে। এবং উপরে এল

আমি কিছু বিশেষজ্ঞের পড়ার অনুমান করছি যে এটি সহজ উপায়টি দেখায় যে আমি ফাংশন ফাইলটি ব্যবহার করে এবং কোনও প্লাগইন ব্যবহার না করেই অ্যাডমিন মেনুটি ঠিক ঠিক অর্ডার করতে পারি (যা আমি জানি যেটি বিদ্যমান)।

দয়া করে এগিয়ে যান এবং 5 টি পৃথক পোস্ট প্রকার তৈরির চেষ্টা করুন এবং এগুলি সরাসরি ড্যাশবোর্ডের নীচে একটি নির্দিষ্ট ক্রমে অন্তর্ভুক্ত করুন ... মনে হয় এটি সম্ভব নয় ?? আমার সাথে বা পছন্দসই jQuery ব্যবহার না করে ভাগ করে নিতে পারে?

উত্তর:


33

হাই @ বাইনারিবিট:

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

ওয়ার্ডপ্রেসে অ্যাডমিন মেনুগুলি কীভাবে কাজ করে তা ব্যাখ্যা করার জন্য এমএমন একটি দুর্দান্ত কাজ করেছিলেন (আমি আশা করি আমি প্রায় 4 মাস আগে এটি পড়তে পারতাম ... :)

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

এগুলি ওয়ার্ডপ্রেসের বিদ্যমান কাঠামোর সাথে 100% সামঞ্জস্যপূর্ণ এবং এখনও আমি এটির ব্যবহারের একমাত্র হয়েছি বলে আলফাটিতে এখনও অনেক বেশি। আমি নিশ্চিত যে ব্যবহারের কেসগুলি এখনও তারা পরিচালনা করে না। তবে আমি আপনাকে এবং অন্যদের চেষ্টা করার জন্য কোডটি এখানে পোস্ট করব।

আপনি এখানে আপনার থিমের ডিরেক্টরিতে ড্রপ করতে ফাইলটি ডাউনলোড করতে পারেন : ডাব্লুপি-অ্যাডমিন-মেনু-ক্লাস.পিএপি এবং এরপরে যা দেখায় যে কীভাবে আপনি আপনার থিমের functions.phpফাইলে ফাংশনগুলি কল করতে পারেন :

<?php
require_once('wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
  swap_admin_menu_sections('Pages','Posts');              // Swap location of Posts Section with Pages Section
  rename_admin_menu_section('Media','Photos & Video');    // Rename Media Section to "Photos & Video"
  delete_admin_menu_section('Links');                     // Get rid of Links Section
  $movie_tags_item_array = get_admin_menu_item_array('Movies','Movie Tags');  // Save off the Movie Tags Menu
  update_admin_menu_section('Movies',array(               // Rename two Movie Menu Items and Delete the Movie Tags Item
    array('rename-item','item'=>'Movies','new_title'=>'List Movies'),
    array('rename-item','item'=>'Add New','new_title'=>'Add Movie'),
    array('delete-item','item'=>'Movie Tags'),
  ));
  copy_admin_menu_item('Movies',array('Actors','Add New')); // Copy the 'Add New' over from Actors
  renamed_admin_menu_item('Movies','Add New','Add Actor');  // Rename copied Actor 'Add New' to 'Add Actor
  add_admin_menu_item('Movies',array(                       // (Another way to get a 'Add Actor' Link to a section.)
    'title' => 'Alt Add Actor ',
    'slug' => 'post-new.php?post_type=actor',
  ), array(// Add Back the Movie Tags at the end.
    'where'=>'end'
  ));
  add_admin_menu_item('Movies',$movie_tags_item_array,array(// Add Back the Movie Tags at the end.
    'where'=>'end'
  ));
  delete_admin_menu_section('Actors');                      // Finally just get rid of the actors section
}

আরও কি, ওয়ার্ডপ্রেস ৩.১-অন্তর্ভুক্তির জন্য এই ফাংশনগুলি এমনকি বিবেচনায় রয়েছে (বেস হিসাবে) সুতরাং আমরা ভাগ্যবান হলে এগুলি এমনকি মানক হয়ে উঠতে পারে!


এপিআইতে চমত্কার সংযোজন! বিদ্যমান কাঠামোর সাথে আমার প্রথম কাস্টম মেনু বিভাগ যুক্ত করতে কয়েক মাস সময় লেগেছিল (যার কারণে আমি কোডটি অনেক কিছু শিখেছি) ... তবে আপনার এপিআই ব্যবহার করতে অনেক বেশি স্বজ্ঞাত বলে মনে হচ্ছে!
ইমন

@ এ্যামান - ধন্যবাদ! আপনি যদি কোনও প্রস্তাব দিতে চান বা এটির উন্নতিতে সহযোগিতা করতে চান তবে আমি এমন কিছু প্রতিষ্ঠা করতে চাই যা এই প্রশ্নোত্তর দেখে কেবলমাত্র কয়েকজনকে বাদ দিয়ে সবার পক্ষে আরও সহজ করে তুলতে পারে।
মাইকচিন্কেল

এটি কি কোর তৈরি করেছে বা এটি বা অ্যাডমিনের মেনু আইটেমগুলির ক্রমটি পরিচালনা করতে অনুরূপ কিছু এখনও প্রয়োজন?
কিউ স্টুডিও

যতদূর আমি খুঁজে পেয়েছি, এটি ডাব্লুপি 3.5
পিক্সলাইন

আরে মাইক - wp_debug এই ফাংশনে একটি ত্রুটি ছুড়ে ফেলেছে: -------- ফাংশন swap_admin_menu_sections ($ from_section, $ to_section) {_ from_section = get_admin_menu_section ($ from_section); যদি ($ from_section) $ from_section-> অদলবদল_উইথ ($ to_section); রিটার্ন $ বিভাগ; । --- বিজ্ঞপ্তি: অপরিজ্ঞাত পরিবর্তনশীল: বিভাগ
কিউ স্টুডিও

21

ওয়ার্ডপ্রেস অ্যাডমিন মেনুটি কীভাবে তৈরি হয় তার একটি দ্রুত পদক্ষেপ এখানে দেওয়া হয়েছে - আমি add_menu_pageএপিআইয়ের কথা বলছি না , আমি আসল ডিফল্ট ওয়ার্ডপ্রেস মেনু বলতে চাইছি।

মেনু ফাইল কল করা হচ্ছে

মেনু একথাও ঠিক যে, দ্বারা লোড হয় wp-admin/admin.php। তবে এটি ওয়ার্ডপ্রেস ডকুমেন্টেশনের উপর ভিত্তি করে আমরা যে স্ট্যান্ডার্ড এপিআই ব্যবহার করে আসছি তা দিয়ে বোঝানো হয়নি। পরিবর্তে, সম্পূর্ণ মেনু (সমস্ত সম্ভাব্য বিকল্প, সাবমেনাস, ইত্যাদি) একটি সাধারণ অ্যারের মাধ্যমে বোঝানো হয়েছে যা সংজ্ঞায়িত করা হয়েছে wp-admin/menu.php

সুতরাং মেনু সিস্টেম বুট করার জন্য, admin.phpশুধু requireগুলি menu.phpওয়ার্ডপ্রেস 3.0 ... লাইন 99 প্রায়।

মেনু লোড হচ্ছে

মেনুটি নিজেই বিশ্বব্যাপী অ্যারেতে সঞ্চয় করা হয় $menu। ইন-লাইন ডকুমেন্টেশন অনুসারে মেনু অ্যারেতে এই উপাদানগুলি রয়েছে:

The elements in the array are:
    *     0: Menu item name
    *     1: Minimum level or capability required.
    *     2: The URL of the item's file
    *     3: Class
    *     4: ID
    *     5: Icon for top level menu

উদাহরণস্বরূপ, ড্যাশবোর্ডটি হ'ল:

$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );

ফাইলটি প্রতিটি মেনু আইটেমটি অ্যারেতে লোড করে এবং তাদের সমস্ত সাব-মেনু আইটেমগুলিকে একটি অ্যারেতে লোড $submenuকরে যা অভিভাবক মেনুর URL এর ভিত্তিতে সূচক বলে । সুতরাং "ড্যাশবোর্ড" নামে ড্যাশবোর্ডের সাবমেনু আইটেমটি হ'ল:

 $submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );

সিস্টেমটি সমস্ত মেনু লোড করার পরে (অনেকগুলি নেই, তবে সিস্টেমটি সূচীটি 5 বা 10 দ্বারা সময়ে সময়ে পদক্ষেপ নেয় ... লক্ষ্য করুন যে ড্যাশবোর্ড, এটি প্রথম মেনু আইটেম হলেও, এখনও সূচিযুক্ত হিসাবে রয়েছে আইটেম "2" (পিএইচপি অ্যারে সূচি 0 তে শুরু হয় ... সুতরাং এটি আপনাকে কিছু কৌশল চালানোর ঘর দেয়)।

এই মুহুর্তে, সিস্টেম কল করে wp-admin/includes/menu.php

মেনু দিয়ে পা রেখে

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

অবশেষে, এটি তাদের নির্ধারিত মেনু ক্রমের ভিত্তিতে মেনুগুলি বাছাই করে।

কাস্টম মেনু অর্ডার

হুক admin_menuপর মেনু স্থাপন করা হয়েছে বলা হয় কিন্তু আগে কিছু নির্দেশ দেওয়া হয়। সুতরাং API কে "হ্যাকিং" না করে পুরো ওয়ার্ডপ্রেস মেনু সিস্টেমে অর্ডার দেওয়া সম্ভব।

ক্রিয়াটি admin_menuবরখাস্ত করার পরে , আপনার কাস্টম পৃষ্ঠাগুলি সিস্টেমে লোড হবে। এর পরেরটি ঘটবে, ওয়ার্ডপ্রেস হ'ল একটি ফিল্টার যাচাই করে custom_menu_order... এই ফিল্টারটি সর্বদা ফিরে আসে falseএবং আপনি কাস্টম অর্ডার ব্যবহার করতে চান কিনা তা ওয়ার্ডপ্রেসকে বলে।

trueপরিবর্তে পতাকা সেট করতে এবং আপনার সুস্পষ্ট মেনু অর্ডারটি সংজ্ঞায়িত করতে আপনার থিমটিতে নিম্নলিখিতগুলি যুক্ত করুন :

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php', 'edit-comments.php');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

সমস্ত মেনুগুলির জন্য আপনি যে ক্রমটি চান তা সুনির্দিষ্ট করুন (আমি মেনু-লোডিং ফাইলের জন্য রেফারেন্স সরবরাহ করেছি যাতে আপনি ফাইলের একটি তালিকা পেতে পারেন) এবং এটি এর যত্ন নেওয়া উচিত।


সম্পাদনা (9/2/2010):

এই পদ্ধতিটি ব্যবহার করে একটি কাস্টম পোস্ট টাইপের সম্পাদনা পর্দার ক্রম নির্দিষ্ট করতে, আপনাকে সম্পাদনার স্ক্রিনের URL জানতে হবে। আমি বেশিরভাগ ক্ষেত্রে, এটি হবে http://blog.url/wp-admin/edit.php?post_type=POST_TYPE। এটি ওয়ার্ডপ্রেস কীভাবে আপনার সাইটে সেট আপ করা হয় (যদি এটি রুটে বা সাবফোল্ডারে ইনস্টল থাকে) এবং আপনি যে কাস্টম পোস্টের ধরণটি ব্যবহার করছেন তার উপর নির্ভর করে।

উদাহরণ স্বরূপ...

ধরা যাক আপনার স্ট্যাক এক্সচেঞ্জ প্রশ্নগুলির জন্য একটি কাস্টম পোস্ট টাইপ রয়েছে এবং আপনি সম্পাদকটি ড্যাশবোর্ড আইকনের নীচে ড্যাশবোর্ডের মতো একই বিভাগে উপস্থিত হওয়া চাই। আপনি আপনার থিমের functions.phpফাইলটিতে নিম্নলিখিত কোডগুলি ব্যবহার করবেন :

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

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

কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি প্রদত্ত বিভাগে সমস্ত মেনু আইটেমের ক্রম নির্দিষ্ট করেছেন , অন্যথায় আপনার মেনুটি কিছু অপ্রত্যাশিত অদ্ভুততার বিষয় হতে পারে।


সেখানে "ক্রমানুসার কাস্টম মেনু" শিরোনামের নীচে আপনার উদাহরণ কোডে একটি ছোট ত্রুটি, যদি কন্ডিশনাল স্টেটমেন্ট অনুপস্থিত $.. পরিবর্তনশীল নাম ... (গ্রেট উত্তর যদিও) এ
t31os

আপনি কীভাবে ড্যাশবোর্ড বিভাগের নীচে একটি বিভাগে "স্ট্যাক এক্সচেঞ্জ প্রশ্নাবলী" এর জন্য কাস্টম পোস্ট প্রকারটি যুক্ত করবেন ?
এপ্যাপগুলি

হাই ইমন - দ্রুত প্রশ্ন। যেহেতু ওয়ার্ডপ্রেসের নতুন সংস্করণটি এই প্রক্রিয়াটি আদৌ বদলেছে বা সহজতর হয়েছে?
নেটকন্সট্রাক্টর.কম

সাবম্যানাসের জন্য কীভাবে ? সাবমেনু আইটেমগুলি পুনরায় সাজানোর জন্য কি একই জাতীয় পদ্ধতি আছে ?
গিরালদী

@ জিরাল্ডিমাগজিও দয়া করে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন এবং এটিকে রেফারেন্স করুন।
EAMAN

18

আমি বুঝতে পারি এটি একটি পুরানো থ্রেড, তবে আমি মনে করি এটি অনেক সহজ সমাধানের সাথে আপডেট করা উপযুক্ত। দয়া করে নোট করুন যে এটি 3.5 এর সাথে কাজ করে এবং অন্য কোনও সংস্করণের সাথে পরীক্ষা করা হয়নি। নিম্নলিখিত কোডটি একটি প্লাগইন বা ফাংশন.এফপি ফাইলে রাখা যেতে পারে।

দেখুন: http://codex.wordpress.org/ প্লাগইন_এপিআই / ফিল্টার_প্রকাশ / মেনু_অর্ডার । মূল পোস্টারের প্রয়োজন অনুসারে সামান্য পরিবর্তন করা হয়েছে (যদিও, আমি আশা করি তিনি এখনই সমাধান খুঁজে পেয়েছেন ...)।

  // Rearrange the admin menu
  function custom_menu_order($menu_ord) {
    if (!$menu_ord) return true;
    return array(
      'index.php', // Dashboard
      'edit.php?post_type=custom_type_one', // Custom type one
      'edit.php?post_type=custom_type_two', // Custom type two
      'edit.php?post_type=custom_type_three', // Custom type three
      'edit.php?post_type=custom_type_four', // Custom type four
      'edit.php?post_type=custom_type_five', // Custom type five
      'separator1', // First separator
      'edit.php?post_type=page', // Pages
      'edit.php', // Posts
      'upload.php', // Media
      'link-manager.php', // Links
      'edit-comments.php', // Comments
      'separator2', // Second separator
      'themes.php', // Appearance
      'plugins.php', // Plugins
      'users.php', // Users
      'tools.php', // Tools
      'options-general.php', // Settings
      'separator-last', // Last separator
    );
  }

  add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order
  add_filter('menu_order', 'custom_menu_order');

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


1
হ্যাঁ এটি আরও ভাল, সাবমেনু আইটেমগুলিকে পুনরায় অর্ডার করতে আপনি আনসেট করতে পারেন এবং সেগুলি পুনরায় সেট করতে পারেন।
উইক

2

আমি বুঝতে পেরেছি আপনি প্লাগইন ব্যবহার করতে চান না, তবে খাঁটি সরলতার জন্য, জেনিস এল্টস দ্বারা অ্যাডমিন মেনু সম্পাদক প্লাগইন চেষ্টা করুন। আপনার অ্যাডমিন মেনুগুলিকে আপনার পছন্দমতো পুনরায় সাজান; মেনু আইটেমগুলিও আড়াল করতে পারে।


আমি এই প্লাগইনটি মাল্টিসাইট ইনস্টলেশনতে চেষ্টা করেছি .এটি সবচেয়ে ভাল কাজ করে ut তবে আমাদের যদি মাল্টিসাইট ইনস্টল থাকে তবে প্রতিটি উপ-সাইটের জন্য বিকল্পগুলি ম্যানুয়ালি কনফিগার করতে হবে।
ব্যবহারকারী 391

2

মেনু আইটেমগুলি প্রায় সরানোর জন্য, আমি গ্লোবাল $menuভেরিয়েবল ব্যবহার করতে চাই ।

উদাহরণস্বরূপ, যদি আমি "পৃষ্ঠাগুলি" মেনুটিকে মেনুগুলির নীচে সরাতে চাইতাম তবে আমি এটি functions.phpবা একটি প্লাগইন এ ব্যবহার করব :

function admin_menu_items() {
    global $menu;
    $menu[102]=$menu[20];//make menu 102 be the same as menu 20 (pages)
    $menu[20]=array();//make original pages menu disappear

}
add_action('admin_menu', 'admin_menu_items');

এবং যদি আমি পোস্ট এবং লিংক মেনুগুলি অদলবদল করতে চাই:

function admin_menu_items() {
    global $menu;
    $storemenu = $menu[15];//save links menu into $storemenu
    $menu[15] = $menu[5];//make links menu = posts menu
    $menu[5] = $storemenu; //make menu 5/posts = $storemenu/links   
}
add_action('admin_menu', 'admin_menu_items');

এই কৌশলটি কিছুক্ষণ ব্যবহার করা হয়েছে, কেবল ডাব্লুপি 3.4.1 এর সাথে পরীক্ষিত


আমি জানি এটি একটি পুরানো পোস্ট তবে আপনার প্রথম স্নিপেটের সাথে আমি admin_menu_itemsফাংশনটির শেষ লাইনটি নিয়ে একটি ইস্যুতে unset($menu[20]);
ছড়িয়েছি

0

অসাধারণ. তোমাকে অনেক ধন্যবাদ. আমি আমার ফাংশন.ফ্পে কোডের কয়েকটি লাইন রেখেছি

require_once('/extras/wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
  swap_admin_menu_sections('Pages','Posts'); // Swop location of Posts Section with Pages Section
}

আমার থিম ফোল্ডারে ডাব্লুপি -অ্যাডমিন-মেনু-ক্লাস.পিএপি রাখার পাশাপাশি এখন 'পোস্ট' বোতামটি 'পৃষ্ঠাগুলি' বোতামের সাথে সজ্জিত হয়।

আমি আশা করি এটি শীঘ্রই এবং এক উপায়ে মূল অংশ হয়ে উঠবে যাতে কেবল দুটি বোতামটি পুনরায় অর্ডার করতে আমাদের কোনও ফাংশনটির মধ্যে পুরো মেনুটি লেখার প্রয়োজন হয় না।

আসলে 4 টি বোতামের জন্য আরও সুনির্দিষ্ট অর্ডার পাওয়া কিছুটা জটিল ছিল। 4 টি বোতামের পরিবর্তন করতে: পৃষ্ঠাগুলি, পোস্ট, মিডিয়া, লিঙ্কগুলিতে আমাকে ফলোয়িং কোডটি ব্যবহার করতে হবে:

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