मैं अपने आप को जवाब दे रहा हूं क्योंकि आज मैंने खुद से 2 सवाल पूछे हैं, जो मैंने पोस्ट किए हैं, और जवाब खोजने के लिए कुछ समय बिताया है। एक बार जब मुझे कोई समाधान मिल गया, तो मैं इसे साझा करना चाहता हूं, लेकिन किसी भी अन्य समाधान को बहुत कम किया गया है और मैं किसी भी समाधान को स्वीकार करने के लिए तैयार हूं, जो मुझे मेरी तुलना में बेहतर मिला। मेरे समाधान के संपादन और सुधार की सराहना की जाती है और साथ ही साथ नै को प्रोत्साहित भी किया जाता है।
संपादित करें
Rarst जवाब के बाद मैंने कोड संपादित किया है। अब फ़ंक्शन मानक डैशिकॉन्स कक्षाओं का उपयोग करते हैं, लेकिन तर्क में एक पुरानी शैली की छवि url और तर्क में एक ब्रांड के नए डैशिकंस वर्ग को भी निर्दिष्ट करने की अनुमति देते हैं ।menu_icon
menu_dashicon
कार्यप्रवाह
पहले मुझे लगता है कि मैं सोचता था कि register_post_type
, एक कार्रवाई को आग देता है registered_post_type
, जो कि हुकिंग कार्यों के लिए पास किए गए तर्कों को पारित करता हैregister_post_type
उन्हें दिए गए हैं, उन्हें फ़िल्टर किए बिना।
इसलिए मैंने 'menu_dashicon'
एक कस्टम डैशकॉन पास करने के लिए तर्क पारित करने का फैसला किया ।
उसके बाद मैंने एक वर्ग बनाने के लिए सोचा जो उस तर्क को सुनता है, एक वर्ग चर में आइकन सहेजता है। वही वर्ग इसके लिए जिम्मेदार हो सकता है
- WP के कर्ण संस्करण की जाँच करें, और यदि यह कम है तो 3.8 कुछ नहीं करते हैं
- यदि संस्करण 3.8+ लूप है
$menu
हुक है, तो उचित हुक पर सरणी और:
- निकालें, यदि मौजूद है, किसी भी कस्टम चित्र के माध्यम से जोड़ा गया
'menu_icon'
और
'menu_dashicon'
परम के माध्यम से जोड़ा गया है के अनुसार इनलाइन शैली जोड़ें
मैं एक एकल फ़ाइल में कोड बनाता हूं, इस तरह इसे आसानी से किसी भी विषय / प्लगइन में शामिल किया जा सकता है या यहां तक कि एमयू प्लगइन के रूप में भी इस्तेमाल किया जा सकता है और उसके बाद एक बस नए ब्रांड का उपयोग किया जा सकता है'menu_dashicon'
हर विषय और / या प्लगइन स्थापित तर्क का है।
मैंने एक न्यूनतम प्लगइन हेडर भी जोड़ा है जो इसे स्टैंडअलोन प्लगइन के रूप में उपयोग करने की अनुमति देता है, लेकिन शायद यह उपयोग करने का कम उपयोगी तरीका है।
कैसे इस्तेमाल करे
अंदर register_post_type
सिर्फ 'menu_dashicon'
डैशिकॉन क्लास के मान के साथ तर्क पास करें ( उपसर्ग 'डैशिकन्स-' के बिना ))
$args = array(
...
'menu_dashicon' => 'chart-pie', // dashicons will be used in WP 3.8+
'menu_icon' => $url_of_the_icon // icon images will be used in WP 3.7.1 & previous
);
register_post_type('my_cpt', $args);
बस इतना ही। अपनी साइट से डैशिकन आइकन वर्ग नाम प्राप्त करें ।
तो यहाँ कोड:
<?php
/**
* Plugin Name: GM CPT Icon
*/
namespace GM;
class CptIcon {
public static $cpt;
public $css;
static function registerIcon( $cpt, $icon ) {
self::$cpt[$cpt] = $icon;
}
function init() {
if ( $this->mp6() ) {
\add_action('admin_menu', array($this, 'parseMenu') );
}
}
function mp6() {
return \version_compare( $GLOBALS['wp_version'], '3.8', '>=' );
}
function parseMenu() {
if ( $this->mp6() && ! empty( self::$cpt ) ) {
foreach ( $GLOBALS['menu'] as $i => $item ) {
if $item[1] === 'edit_posts' && (strpos($item[2], 'edit.php?post_type=') === 0)) {
$this->menuItemClass($i, str_replace('edit.php?post_type=', '', $item[2]));
}
}
}
}
function menuItemClass( $i, $type ) {
if ( \in_array($type, \array_keys(self::$cpt), TRUE ) ) {
$GLOBALS['menu'][$i][4] = str_replace('menu-icon-post', '', $GLOBALS['menu'][$i][4]);
$GLOBALS['menu'][$i][6] = 'dashicons-' . self::$cpt[$type];
}
}
}
\add_action('plugins_loaded', function() {
if ( \is_admin() && !( \defined('DOING_AJAX') && \DOING_AJAX ) ) {
$cpticon = new CptIcon;
$cpticon->init();
}
});
\add_action('registered_post_type', function( $post_type, $args ) {
if ( isset($args->menu_dashicon) && ! empty($args->menu_dashicon) ) {
CptIcon::registerIcon($post_type, $args->menu_dashicon);
}
}, 10, 2);
यह जिस्ट के रूप में भी उपलब्ध है
दो सीपीटी: "आइडियाज़" और "गैलरी" डैशिकन्स का उपयोग करते हुए। नोट अलग-अलग व्यवस्थापक रंग योजनाओं के साथ ऑटो रंग परिवर्तन।
menu_icon
तो आप पिछले संस्करणों के लिए छवि यूआरएल का उपयोग नहीं कर सकते हैं ... लेकिन अतीत की परवाह कौन करता है? :)