WP 3.8'de yönetici menüsü simgesini Dashicons kullanarak CPT'leri kaydettirin


15

WordPress 3.8, diğer şeylerin yanı sıra, gösterge panosunda yazı tiplerini görüntülemek için Dashicons adlı ikonik bir yazı tipi kullanan MP6 eklentisinin çekirdeğini tanıttı.

Şimdi, register_post_type öğesinin 'menu_icon'CPT admin menü girişi için özel bir simge belirtmeye izin veren bir argümanı olduğunu iyi biliyorum .

Eklentilerim / temalarımda bu argümanı normalde karanlık olan özel simge görüntülerimle sık sık kullanıyorum çünkü 3.8 yönetici menüsünün açık bir arka planı vardı. WP 3.8'deki varsayılan karanlık menü arka planı ile simgelerim neredeyse görünmez hale geliyor.

Bu bir yana, bence CPT'm için yeni dasiconları kullanmanın harika olacağını düşünüyorum.

Biraz araştırma yaptıktan sonra, CSS'yi dashicons'tan kullanabileceğimi biliyorum,

#menu-posts-mycpt div.wp-menu-image:before { content: "\f226"; }

Ancak ikisini de kullanarak 'menu_icon'bir argüman register_post_type ve önceki css WP 3.8 hem simgeleri yazdırmak ve WP durum 3,8 garip kömürün + bir simge ve kullanılmadan olacak'menu_icon' varsayılan simge kullanılır eski sürümlerinde, argüman.

Ben şartlı ekleyebilir biliyorum 'menu_icon'yılında register_post_typeWP durum 3,8 sürümleri için ve koşullu 3.8+ WP için önceki css katmakla kalmıyor:

  • her biri için bir kod (2 koşullu ifade) eklemeyi içerirkaydedilen CPT , bu nedenle eklentileri / temaları güncellemek oldukça zor bir iştir
  • bana zarif bir çözümden daha çok bir çözüm gibi görünüyor

Yani sorular:

WP 3.8+ için dashicons css kullanmak ve üzerinden özel görüntü ayarlamak mümkündür 'menu_icon' kayıtlı her CPT için 2 koşullu eklemeyi içermeyen "daha basit" bir şekilde önceki sürümler için param ?

Ve eğer öyleyse, bunu herhangi bir otomajik şekilde register_post_typeherhangi bir ek kod olmadan doğrudan yapmak mümkün mü?

Yanıtlar:


9

Tavşan deliğinden ve arkasından geçtikten sonra cevap - evet , çekirdek yazı tiplerini kaydederken ve menü sayfaları eklerken dashicons'ı kolayca kullanmanıza izin veriyor.

Onun CSS sınıfı geçmesi gerekiyor dashicon kullanmak için dashicons-[name]hiç menu_iconya da icon_urlilgili yerlere.

Mevcut sınıflar dashicons.csskaynak veya Dashicons sitesinde aranabilir (simgesini tıklayın ve üstündeki isme bakın).

Uyarmak! 3.8 dashicons-piechart, satıriçi dokümanlardaki sınıf örneği olarak piyasaya sürülmüş gibi görünüyor , bu yanlış ve işe yaramayacak. Sürümdeki bu simge için gerçek sınıf dashicons-chart-pie.


Bunu kabul ettim çünkü bu işi yapmanın doğru yolu. Benim eklenti olarak daha iyi geriye dönük uyumlu olma avantajı olarak (ve char yerine sınıf isimlerini kullanmayı düzeltebilirim) çünkü dashicons sınıfını koyarsanız menu_icon, önceki sürümler için resim URL'sini kullanamazsınız ... ama geçmişi kimin umurunda? :)
gmazzap

4

Kolay: Sadece register_post_type()phpDocBlock öğesinin ilgili bölümünü okuyun ve ardından aşağıdakiler için doğru bağımsız değişkeni kullanın menu_icon: D

  • Dashicons sınıfını kullanın . Örneğin;dashicon-groups
  • Renk düzeniyle eşleşecek şekilde renklendirilecek bir veri URI'si kullanarak base64 kodlu bir SVG geçirin. Bu ile başlamalıdır data:image/svg+xml;base64,.
  • Boş 'none'bırakmak için geçiş yapın div.wp-menu-image, böylece CSS yoluyla bir simge eklenebilir.

1
* Dashicons sınıfı, @Rarst'ın cevabında söylediği şeydir. * Base64-encode kullanmak yararlı olabilir, ancak imho gerçekten basit değil, ek olarak svg-painer.js, renk değişikliğini işlemek için kullanılan core js kütüphanesi, simge standart dashicons'tan daha "karmaşık" ise çok zaman alıcı olabilir. * Üçüncü seçenek (boş simge) sadece WP 3.8+ için değil, uzun bir zamandan beri ... ve css kullanmak kaçınmak istediğim bir şeydir (soru başına). Bu yüzden +1 tüm seçenekleri bir araya getirdiği için, ancak kabul edilen cevabın sorumu zaten sorduğunu düşünüyorum. PS adınıza yakın elmas görmek mutluyuz :)
gmazzap

@GM svg-painter.jsDosya hakkında ilginç bilgiler . Henüz denemediğim için bilmiyordum.
Kaiser

1
Bir kez fareyle üzerine gelindiğinde renk değişikliği efekti oluşturmak için biraz karmaşık bir svg görüntüsünde (basit bir bina bitkisiydi) kullanmaya çalıştım. Gecikme nedeniyle vazgeçtim ve başka bir yaklaşım kullandım.
gmazzap

2
@ GM Bunun için teşekkürler. Bu konuda bir blog yazısı yazmalısın :) Arama yapıyordum ve bulabildiğim tek kullanışlı Sven'den biriydi .
Kaiser

3

Kendime cevap veriyorum çünkü bugün kendime gönderdiğim 2 soruyu sordum ve cevap bulmak için biraz zaman harcadım. Bir çözüm bulduğumda, paylaşmak istiyorum, ancak başka bir çözüm çok onaylandı ve benimkinden daha iyi bulduğum herhangi bir çözümü kabul etmeye hazırım. Çözümümdeki düzenlemeler ve geliştirmeler de takdir ediliyor.


Düzenle

Rarst cevabından sonra kodu düzenledim. Şimdi fonksiyon kullanımı standart dashicons sınıflar fakat aynı zamanda eski bir stil resim url'sini belirtmek için izin menu_iconargüman ve yepyeni dashicons sınıfını menu_dashiconargüman.


İş Akışı

İlk olarak düşündüm ki register_post_type, bir registered_post_typeargümanı ateşleyen, geçirilen argümanları register_post_typefiltrelemeden takma işlevlerine geçen , bu işlevlere özel argümanlar oluşturmak mümkündür.

Bu yüzden 'menu_dashicon'özel bir dashicon'u geçmek için argümanı geçmeye karar verdim .

Bundan sonra, bu değişkeni dinleyen bir sınıf yaratmayı düşündüm, ikonu bir sınıf değişkenine kaydettik. Aynı sınıf sorumlu olabilir

  1. WP'nin güncel sürümünü kontrol edin ve 3.8'den küçükse hiçbir şey yapmayın
  2. sürüm 3.8+ ise $menudiziyi uygun kancaya geçirin ve:
  3. ve varsa eklenen özel resimleri kaldırın 'menu_icon've
  4. 'menu_dashicon'param yoluyla eklenene göre satır içi stili ekleyin

Kodu tek bir dosyada oluşturuyorum, bu şekilde herhangi bir tema / eklentiye kolayca dahil edilebilir veya hatta MU eklentisi olarak kullanılabilir ve bundan sonra 'menu_dashicon'yüklenen her tema ve / veya eklentide yepyeni argümanı kullanabilirsiniz .

Ayrıca, bağımsız bir eklenti olarak kullanılmasına izin veren minimal bir eklenti başlığı ekledim, ancak muhtemelen bu daha az kullanışlı bir yoldur.

Nasıl kullanılır

İçeride register_post_typesadece 'menu_dashicon'dashicon sınıfının değeri ile argümanı geçirin ( 'dashicons-' öneki olmadan ):

$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);

Bu kadar. Dashicons simge sınıfı adını sitesinden alın .

İşte kod:

<?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);

Gist olarak da mevcuttur


Dashicon kullanan CPT'ler

İki CPT: "Fikirler" ve "Galeriler". Farklı yönetici renk şemalarıyla otomatik renk değişikliğine dikkat edin.



0

Ben sadece özel yazı türünü kaydeden koda bu satırı ekledi:

'menu_icon'    => 'dashicons-admin-users',

İşte tam kod

resim açıklamasını buraya girin

Herhangi bir CSS eklemenize gerek yok.


@Rarst'ın cevabında söylediği şey tam olarak bu ...
gmazzap

Rarst, CPT'yi veya bağladığım tam snippet'i oluşturan koda eklenmesi gereken kod satırını sağlamaz. Ayrıca CSS'ye gerek yok, bu yüzden çözümüm daha verimli.
Brad Dalton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.