ฉันตอบตัวเองเพราะวันนี้ฉันถามตัวเอง 2 คำถามที่ฉันโพสต์และใช้เวลาในการค้นหาคำตอบ เมื่อฉันพบวิธีแก้ไขปัญหาฉันต้องการแบ่งปัน แต่โซลูชันอื่น ๆ ได้รับการอัปเดตอย่างมหาศาลและฉันพร้อมที่จะยอมรับวิธีแก้ไขปัญหาใด ๆ ที่ฉันพบว่าดีกว่าของฉัน การแก้ไขและปรับปรุงวิธีการแก้ปัญหาของฉันได้รับการชื่นชมและไม่สนับสนุน
แก้ไข
หลังจากคำตอบRarstฉันแก้ไขโค้ดแล้ว ตอนนี้ฟังก์ชั่นใช้คลาส dashicons มาตรฐาน แต่ยังอนุญาตให้ระบุ URL รูปแบบเก่าในการmenu_icon
โต้แย้งและคลาส dashicons ใหม่ในการmenu_dashicon
โต้แย้ง
ขั้นตอนการทำงาน
แรกคิดว่าฉันคิดว่าเป็นที่register_post_type
fires การกระทำregistered_post_type
ที่ผ่านไป hooking หน้าที่ข้อโต้แย้งส่งผ่านไปregister_post_type
โดยไม่ต้องกรองพวกเขาจึงเป็นไปได้ที่จะสร้างข้อโต้แย้งที่กำหนดเองเพื่อฟังก์ชั่นที่
ดังนั้นฉันจึงตัดสินใจที่จะผ่านการโต้เถียง'menu_dashicon'
เพื่อผ่านแดชบอร์ดที่กำหนดเอง
หลังจากนั้นฉันคิดว่าจะสร้างคลาสที่ฟังอาร์กิวเมนต์นั้นให้บันทึกไอคอนในตัวแปรคลาส ชั้นเรียนเดียวกันสามารถรับผิดชอบได้
- ตรวจสอบรุ่นของกระแส WP และถ้าน้อยกว่านั้น 3.8 จะไม่ทำอะไรเลย
- ถ้า version เป็น 3.8+ วนรอบ
$menu
อาร์เรย์บน hook ที่เหมาะสมและ:
- ลบหากมีภาพที่กำหนดเองใด ๆ ที่เพิ่มผ่าน
'menu_icon'
และ
- เพิ่มสไตล์อินไลน์ตามสิ่งที่ถูกเพิ่มผ่าน
'menu_dashicon'
พารามิเตอร์
ฉันสร้างรหัสในไฟล์เดียวด้วยวิธีนี้มันสามารถรวมได้อย่างง่ายดายในชุดรูปแบบ / ปลั๊กอินใด ๆ หรือแม้กระทั่งใช้เป็นปลั๊กอิน MUและหลังจากนั้นก็สามารถใช้'menu_dashicon'
อาร์กิวเมนต์ใหม่เอี่ยมในทุกชุดรูปแบบและ / หรือปลั๊กอินที่ติดตั้ง
ฉันยังได้เพิ่มส่วนหัวของปลั๊กอินขั้นต่ำที่อนุญาตให้ใช้เป็นปลั๊กอินแบบสแตนด์อโลน แต่อาจเป็นวิธีที่มีประโยชน์น้อยกว่าในการใช้
วิธีใช้
ข้างในregister_post_type
ผ่านการ'menu_dashicon'
โต้แย้งด้วยค่าของคลาส dashicon ( โดยไม่มีคำนำหน้า 'dashicons-'):
$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);
นั่นคือทั้งหมดที่ รับ Dashicons ชื่อชั้นไอคอนจากเว็บไซต์ของตน
ดังนั้นที่นี่รหัส:
<?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);
มันยังมีอยู่ในส่วนสำคัญ
CPT สองรายการ: "แนวคิด" และ "คลังภาพ" โดยใช้ Dashicons หมายเหตุการเปลี่ยนสีอัตโนมัติด้วยชุดสีผู้ดูแลระบบที่แตกต่างกัน
menu_icon
คุณไม่สามารถใช้ URL รูปภาพสำหรับรุ่นก่อนหน้า ... แต่ใครสนใจในอดีต :)