Ajouter par programme des icônes impressionnantes de polices au widget de catégorie
-
-
Veuillez clarifier votre questionpourexpliqueren quoielleest * spécifique à WordPress *,plutôt que simplement ** CSS **.Veuillez égalementmodifier votre questionpourinclure ** ce que vous avezfait/essayéjusqu'àprésent **.Commentincluez-vous/mettez-vousen file d'attente lapolice FontAwesome?Please clarify your question to explain how it is *WordPress-specific*, rather than merely **CSS**. Also, please edit your question to include **what you have done/tried so far**. How are you including/enqueueing the FontAwesome font?
- 1
- 2014-01-04
- Chip Bennett
-
Modification ajoutéepour répondre à vos questions.Edit added to answer your questions.
- 0
- 2014-01-06
- MrJustin
-
"* Ceciest spécifique à WordPress carje souhaitepersonnaliser les catégories WordPress via lefichier FUNCTIONS.PHP *" - étant donné que la solution ultimeesttoujours **entièrement CSS **,la questionn'esttoujourspas spécifique à WordPress.Cela seproduit simplement * dans le contexte * de WordPress.Votre limitation de vouloir qu'unefonction apparaisse dans `functions.php`,quiexclut les réponses lesplusplausibles,rend également cette questiontrop localisée.Peut-être que si vous éditiez la questionpour vous concentrer sur ** commentmettreen file d'attente un CSSpersonnalisé **,ce serait sur le sujetpour WPSE?"*This is WordPress specific due to me wanting to customize WordPress categories via the FUNCTIONS.PHP file*" - given that the ultimate solution is still **entirely CSS**, the question still isn't WordPress specific. It merely happens *in the context* of WordPress. Your limitation of wanting a function to pop into `functions.php`, which excludes the most plausible answers, also makes this question too localized. Perhaps if you edited the question to focus on **how to enqueue custom CSS**, it would be on-topic for WPSE?
- 1
- 2014-01-06
- Chip Bennett
-
Encore unefois,je ne veuxpas de solution CSS.Ma limitation élargit égalementmon avenirpour cebesoin.J'aime lesicôneset d'autrespeuvent vouloir desicônes.À l'avenir,je pourrais créer unepage d'optionspourmoi-mêmepour ajouter desicônes SPÉCIFIQUES,pas seulement une seuleicône.Jen'ai absolument aucuneintention d'utiliser CSS là-dessus,je ne voulaispas d'image d'arrière-plan,et j'ai complimenté quelqu'unpour avoirfait le: after {content}maisencore unefois,cen'estpas ce queje veux.C'est SPÉCIFIQUE à WordPress,je sais comment lefaireen CSSet comment lefaireen HTML.Jene savaispas comment lefaire dans WordPressen éditant le Widget via unefonctionpersonnalisée.Again, I don't want a CSS solution. My limitation also expands my future for this need. I like icons, and others may want icons. In the future, I may build an options page for myself to add SPECIFIC icons, not just a single icon. I have absolutely no intention of using CSS on this, I didn't want a background-image, and I did compliment someone on doing the :after {content} but again, it's not what I'm wanting. This is SPECIFIC to WordPress, I know how to do it in CSS and how to do it in HTML. I didn't know how to do it in WordPress by editing the Widget via a custom function.
- 0
- 2014-01-06
- MrJustin
-
L'attribut CSS `content` *n'estpas uneimage d'arrière-plan *,c'est * content *.Et une solution CSSest la *meilleure *façon demettreen œuvre -même si vous souhaitezexposer les options de l'utilisateurfinal.Ce quej'essaie de vous aider à voir,c'est que vos contraintesinutileset arbitraires rendent leproblèmeinutilement difficile.The CSS `content` attribute *isn't a background image*, it's *content*. And a CSS solution is the *best* way to implement - even if you want to expose end-user options. What I'm trying to help you see is that your unnecessary and arbitrary constraints are making the problem unnecessarily difficult.
- 1
- 2014-01-07
- Chip Bennett
-
Comme le dit @Chip,votre question dans saforme actuelle concerne strictement uneimplémentation CSS - vous demandeztrès clairement comment afficher un seul caractère àpartir d'unepolice àbase d'icônes.Lafaçon dont celaest accompliest deplacer ce caractère dans le HTMLet d'appliquer lapoliceface au caractère (ou à un élément de conteneur) à l'aide de CSS.Aucunepartie de ceprocessusn'a rien à voir avec WordPress.Nullepart dans votre question vousn'indiquez que vous souhaitez ajouter cepersonnageen modifiant la sortie de WordPress.Celaestexcessifet trèsprobablementinutile si votre questionestexacte.As @Chip is stating, your question as it stands is strictly regarding a CSS implementation - you are very clearly asking how to display a single character out of an icon-based font-face. The way in which this is accomplished is by placing that character in the HTML and applying the font face to the character (or a container element) using CSS. No part of this process has anything to do with WordPress. Nowhere in your question do you state that you wish to add this character by modifying WordPress's output. Doing so is excessive and very likely unnecessary if your question is accurate.
- 0
- 2014-01-07
- bosco
-
Enprolongeantmon commentaireprécédent,la réponse debirgire que vous avez acceptée ci-dessous ***est uneimplémentation CSS *** - la seule chose différenteest qu'il ajoute l'élément de style CSSen utilisant PHPet desexpressions régulièresplutôt que de simplement l'insérer directement dans votrebalisage demodèle.Celaentraîne une surcharge de ressourcespour le chargementet l'exécution du PHP dontiln'est absolumentpasnécessaire.Veuillez re-factoriser votre questionpourimpliquer que vous souhaitez ajouter ce caractèreparprogrammeet côté serveur si c'est vraiment le cas.Il seraittrès utile de dire ***pourquoi *** vous avez également cesexigences.Expanding on my previous comment, birgire's answer that you have accepted below ***is a CSS implementation*** - the only thing different is he is adding the CSS-styled element using PHP and regular expressions rather than simply directly inserting it in your template markup. This incurs a resource overhead for loading and executing the PHP that there is absolutely no need for. Please re-factor your question to imply that you wish to add this character programmatically and server-side if this is truly the case. It would aide greatly if you would state ***why*** you have these requirements, too.
- 0
- 2014-01-07
- bosco
-
Nepas chercher à vous aliénerici ou quoi que ce soit -justeessayer demieux définir votre questionet de lamettre au diapason desnormes denotre communauté -mais vous devriez supprimer lemot sur * "Jene veux vraimentpas réinventer la roueici,donc sije pouvais simplementinsérer quelque chose dansmonfichier dethèmesfunction.php,ce seraitgénial "*et ajouter desinformations sur ce que vous aveztentéjusqu'àprésent.En l'état,votre questionest *très clairement * de demander ànotre communauté de vous remettre du code sansmontrer d'efforts de votrepart,ce quiest contraire ànosnormes.Veuillez consulter [demander]pouren savoirplus surnosnormes.Not seeking to alienate you here or anything - just trying to see your question better defined and bring it up to snuff with our community's standards - but you should remove the bit about *"I really don't want to re-invent the wheel here, so if I could just pop something into my themes function.php file that would be great"* and add information regarding what you have attempted so far. As it stands, your question is *very clearly* asking our community to hand you code without showing effort on your part, which is against our standards. Please see [ask] for more on our standards.
- 0
- 2014-01-07
- bosco
-
Ok,si cette **modification ** queje viens defairene suffitpas ... alors vouspouvez supprimer cette question.Jepréférerais quepersonnene perde sa réputation acquisegrâce à cela.Si vouspouviez lefermer,celapourrait être lameilleure alternative.Ok, well if this **edit** I just did doesn't suffice.. then you may delete this question. I would prefer no one to lose their reputation gained through this. If you could close it, that may be the better alternative.
- 0
- 2014-01-07
- MrJustin
-
"* Jene souhaitepas vraiment avoir àmettre 25 lignes de code dansmon CSSpour afficher les différentesicônes. *" - le vraiproblème avec ceciest que cela rend votre question *trop localisée *,car vous restreignez lemeilleuret leplussolution évidente: CSS.Jene peuxtout simplementpas comprendrepourquoi 25 lignes de CSS sontmoins souhaitables queplusieursfiltreset 50 lignes de remplacement de chaîne PHP."*I do not really wish to have to put 25 lines of code into my CSS to display the different icons.*" - the real problem with this is that it makes your question *too localized*, because you restrict the best and most obvious solution: CSS. I simply can't fathom why 25 lines of CSS is less-desirable than multiple filters, and 50 lines of PHP string-replacement.
- 1
- 2014-01-07
- Chip Bennett
-
Ehbien,peut-être que la solution CSSest laplus évidentepour vous.Cen'estpas une évidencepourmoi,je regarde les choses à une échelle différente,doncmoninterprétation des étapespour y arriver va varier.Donc,si celan'étaitpas localisé,celane tomberaitpas sous * WordPress Specific *.J'ai unproblème quime concerne,ilne vous concernepeut-êtrepas,maistous lesproblèmesne le sontpas.Je suis venuicipour une solution ** WordPress ** à quelque chose,et je l'aieue.Jene saispaspourquoinousnousbattonstoujourspour quelque chose qui a été répondu.Je suis satisfait de la réponse ...en rester là.Oh well, maybe the CSS solution is the obvious for you. It is not the obvious for me, I'm looking at it on a different scale, so my interpretation of the steps to get there are going to vary. So, if this was not localized, it would not fall under *WordPress Specific*. I have a problem that relates to me, it might not relate to you, but not every problem does. I came here for a **WordPress** solution to something, and I got it. I don't know why we are still battling over something that has been answered. I'm satisfied with the answer.. leave it at that.
- 0
- 2014-01-07
- MrJustin
-
"Jene saispaspourquoinousnousbattonstoujourspour quelque chose qui a été répondu."-parce que les sites Stack Exchangene sontpas desforums de support,mais des sites de questionset réponses destinés à créer unebase de connaissancespour une applicationgénérale/universelle.Votre limitation arbitraire rend la questionpas universellement utile,c'estpourquoielle la rendtrop localisée.Etbien que vous soyez libre d'accepter la réponse qui correspond lemieux à vosbesoins,la réponse acceptéeest,trèsfranchement,terriblepour lagrandemajorité despersonnes qui doiventincorporer despolices d'icônes."I don't know why we are still battling over something that has been answered." - because Stack Exchange sites are not support forums, but Question and Answer sites intended to build a knowledge base for general/universal application. Your arbitrary limitation makes the question not universally useful, which is why it renders the question as too localized. And while you're free to accept whatever answer best suits your needs personally, the accepted answer is, quite frankly, terrible for the vast majority of people who need to incorporate icon fonts.
- 1
- 2014-01-07
- Chip Bennett
-
Alors signalez-leet nous verrons ce qui sepasse.Jene vaispasme battrepour quelque chose.J'aiessayé de supprimerma questionet celane me laisserapas,alors laissez lesmodérateurs décider de l'action appropriée àpartir d'ici.Well flag it then, and we will see what happens. I'm not going to battle over something. I tried to delete my question and it will not let me, so let the moderators decide the appropriate action from here.
- 0
- 2014-01-07
- MrJustin
-
@MrJustin,je crois que vosmodifications ontnon seulement apporté votre question sur le sujet,mais ont égalementfourni les contraintesnécessaires qui ontfait de la sélection d'uneimplémentationnon CSS un choix logique.J'ai changémon vote défavorableen votefavorable.J'appréciegrandement votrepatience àtraverstout celaet votre volonté de réviser votre questionpour lebien denotre communauté!@MrJustin, I believe that your edits have not only brought your question on-topic, but also provided the necessary constraints that made selecting a non-CSS implementation a logical choice. I have changed my down-vote to an up-vote. I greatly appreciate your patience through all of this, and willingness to revise your question for the betterment of our community!
- 0
- 2014-01-08
- bosco
-
J'aifourni une dernière révision afin de ramener la question à saforme laplusbasiqueet laplus directe,et d'unemanière qui,espérons-le,empêchera lesfuturs lecteurs cherchant simplement à ajouter uneicône d'implémenter la réponse acceptéeplus complexe ci-dessous.I have provided one final revision in order to distill the question down to it's most basic and direct form, and in a manner that will hopefully prevent future readers seeking to simply add an icon from implementing the more complex accepted answer below.
- 0
- 2014-01-09
- bosco
-
@bosco J'apprécie votre révision,et bien queje ne l'aipas acceptée,je latrouveplus que satisfaisante.J'apprécie le votepositif.Jen'avais vraiment aucuneintentionet n'aimepasme disputer.Je suis heureux quenous ayonspuparvenir à une solution raisonnable.Jeferai unmeilleureffort lors de l'établissement demes questions originalespourfaire décrire **exactement ** ce queje tente defaire.Encore unefois,je vous remerciebeaucoup.@bosco I appreciate your revision, and while I did not accept it, I find it more than satisfactory. I appreciate the up vote. I really had no intention, and do not like to argue. I am glad we could come to a reasonable solution. I will put forth a better effort when establishing my original questions to make describe **exactly** what I am attempting to do. Once again, thank you very much.
- 1
- 2014-01-09
- MrJustin
-
4 réponses
- votes
-
- 2014-01-04
Hypothèses:
Vousn'expliquezpas comment vous voulezinstaller lepackage Font Awesome,doncje supposejustepour lemoment que vous utilisez leplugin Icônes depolicesgéniales .
Vous avez écrit:
Avant que quiconque dise d'utiliser uneimage d'arrière-plan,je ne veuxpasfaire cela.je aimerait que ce soitphysique.
doncje suppose que vous voulez utiliser labalise
<i>
directement,parexemple:<i class="fa icon-caret-right"></i>
après chaque lien de catégorie dans la liste des catégories de widgets .
Idée:
Vouspouvez utiliser lefiltre
wp_list_categories
pourmodifier la sortie de la liste des catégories de widgets.Exemple:
Voici unexemple simple comment l'injecter dans la liste des catégories via lefiltre
wp_list_categories
:/** * Inject Font Awesome <i> tag after each widget category link * * @param string $output * @return string $output */ function custom_wp_list_categories( $output ) { remove_filter( current_filter(), __FUNCTION__ ); return str_ireplace( '</li>', '<i class="fa icon-caret-right"></i></li>', $output); } add_action( 'widgets_init', function(){ add_filter( 'wp_list_categories', 'custom_wp_list_categories' ); });
Cela vous donnera un résultat similaire à celui-ci:
Assumptions:
You don't explain how you want to install the Font Awesome package, so I just assume for the moment that you use the plugin Font Awesome Icons.
You wrote:
Before anyone says use a background image, I do not want to do that. I would like it to be physical.
so I assume you want to use the
<i>
tag directly, for example:<i class="fa icon-caret-right"></i>
after each category link in the widget category list.
Idea:
You can use the
wp_list_categories
filter to modify the output of the widget category list.Example:
Here is a simple example how to inject it into the category list via the
wp_list_categories
filter:/** * Inject Font Awesome <i> tag after each widget category link * * @param string $output * @return string $output */ function custom_wp_list_categories( $output ) { remove_filter( current_filter(), __FUNCTION__ ); return str_ireplace( '</li>', '<i class="fa icon-caret-right"></i></li>', $output); } add_action( 'widgets_init', function(){ add_filter( 'wp_list_categories', 'custom_wp_list_categories' ); });
This will give you an output similar to this one:
-
Bonmorceau de code,je le vérifierai quandje reviendrai dans uninstant.Jepublierai les résultats.Great bit of code, I will check it out when I return in a bit. I will post the results.
- 0
- 2014-01-04
- MrJustin
-
n'oubliezpas d'ajuster lenom de la classe à vosbesoins ;-) J'ai utilisé le `icon-caret-right`parce que c'est la règle denommage de classe selon leplugin.Dans d'autres cas,ilpeut s'agir de «fa-caret-right».just remember to adjust the class name to your needs ;-) I used the `icon-caret-right` because that's the class naming rule according to the plugin. In other cases it might be `fa-caret-right`.
- 0
- 2014-01-04
- birgire
-
`return str_ireplace ('',' ',$ output);` afonctionné,mais `return str_ireplace (' ',' ',$ output); `ne l'apasfait.`return str_ireplace( '', '', $output);` worked, but `return str_ireplace( '', '', $output);` did not.
- 0
- 2014-01-05
- MrJustin
-
- 0
- 2014-01-05
- birgire
-
Ok,maintenantje suisperdu sur lanouvellepartie .. comment çamarcheexactement?Je comprends le derniermorceau,maispas lepremier.Ok, now I'm lost on the new part.. how exactly does that work? I understand the last bit, but not the first bit.
- 0
- 2014-01-06
- MrJustin
-
Nepas rejeter une solution/tentative légitime d'aider l'OP,mais vraiment: utiliser le remplacement de chaîne PHP alors qu'une simple règle CSS suffirait sembleexagéré.Not going to downvote a legitimate solution/attempt to help the OP, but really: using PHP string-replacement when a simple CSS rule would suffice seems to be overkill.
- 1
- 2014-01-06
- Chip Bennett
-
Je suis désolé dene pas êtreplusprécis dansma «question» d'origine,mais celane se limiterapas à quelque chose d'aussipetit que demettre l'icône là-dedans.Cela va être développé à l'avenir,et CSSn'apas saluémesbesoins,commepourquoij'aipostéici;).I'm sorry for not being more specific in my original 'Question' but this isn't going to be limited to something as small as putting the icon in there. This is going to be expanded out in the future, and CSS didn't salute my needs, as why I posted on here ;).
- 0
- 2014-01-06
- MrJustin
-
@MrJustinmercipour le vote,je suis égalementimpressionnépar les réponsesingénieusesfourniespar les autres utilisateurs.ps: `\ s *` correspond àn'importe quel caractère d'espacement,comme l'espace,latabulationet lanouvelle ligne.@MrJustin thanks for the voting, I'm also impressed by the ingenious answers provided by the other users. ps: `\s*` matches any whitespace character, like space, tab and newline.
- 1
- 2014-01-06
- birgire
-
@MrJustinpourriez-vous s'il vousplaît élargir votre questionpour détailler ces "besoinsfuturs"pour lesquels le CSSestinsuffisant?Dans l'état actuel des choses,votre question concerne spécifiquement le CSSet n'estpas liée à WordPress,et entant quetelle,elle repose sur desmotifs sournoispour êtrefermée comme hors sujet.@MrJustin could you please expand your question to detail these "future needs" for which CSS is insufficient? As it stands your question is specifically regarding CSS and is not tied to WordPress, and as such is sitting on shifty grounds for being closed as off-topic.
- 2
- 2014-01-07
- bosco
-
Jepourrais également ajouter qu'unfiltre WordPress était suffisammentexcessif comptetenu de laportée de la question de MrJustin.Jene pensepas que le conduire dans lesexpressions régulières soit unebonneidée ... Jene peuxpasm'empêcher depenser que lesexpressions régulières sont à l'opposé de la simplicité d'uneimplémentation CSS statique.Je crainspourtoutfutur WPSEpedian qui vientici chercher à afficher un seul caractère àpartir d'unepolice d'icôneset se retrouve avec unmorceau d'expressions régulières dans leurbackend.Ayezpitié desn00bs!I might also add that a WordPress filter was excessive enough given the scope of MrJustin's question. I hardly think leading him into regular expressions is a good idea... I can't help but feel regular expressions lie polar opposite to the simplicity of a static CSS implementation. I fear for any future WPSEpedian who comes here looking to display a single character out of an icon-font and winds up with a chunk of regular expressions in their backend. Have pity on the n00bs!
- 2
- 2014-01-07
- bosco
-
onpourrait aussi utiliser: `return str_ireplace ('',' ',$ output);`one could also use: `return str_ireplace( '', ' ', $output);`
- 2
- 2014-01-07
- birgire
-
@birgire,j'apprécie cet ajout!@birgire, I appreciate that addition!
- 0
- 2014-01-08
- bosco
-
- 2014-01-04
Cette réponse contient une solution CSS assez simple.
Engros,vous ajouteriez ce qui suit à votrefeuille de style:
.cat-item cat-item-7 { list-style-image: url('my-epic-news-icon'); } cat-item cat-item-11 { list-style-image: url('my-epic-jquery-icon'); }
etc
Oui,cen'estpas une solutiontrès dynamique,mais vos catégoriesne sontpas susceptibles de changerje suppose.
This answer contains a fairly simple CSS solution.
Essentially, you'd add the following to your stylesheet:
.cat-item cat-item-7 { list-style-image: url('my-epic-news-icon'); } cat-item cat-item-11 { list-style-image: url('my-epic-jquery-icon'); }
etc
Yes, it's not a very dynamic solution, but your categories aren't likely to change I suppose.
-
Lefait que la réponse soitpurement CSSindique que la question sous-jacenteest hors sujetpour WPSE.Cela dit:je pense que vos sélecteurs CSSn'ontpas la syntaxe appropriée.Vous devez utiliser `.cat-item.cat-item-7` - ou,puisque lamêmeimage depolice d'icôneest destinée à être utiliséepourtous les éléments de la liste,utilisez simplement` .cat-item`.Aussi: uneicône depolice utiliserait l'attribut `content`,et ciblerait lapseudo-classe`: after`,telle que: `.cat-item: after {content: '\f18d';} `.That the answer is pure CSS is indicative of the underlying question being off-topic for WPSE. That said: I think your CSS selectors do not have proper syntax. You should use `.cat-item.cat-item-7` - or, since the same icon font image is intended to be used for all list items, just use `.cat-item`. Also: a font icon would use the `content` attribute, and would target the `:after` pseudo-class, such as: `.cat-item:after { content: '\f18d'; }`.
- 2
- 2014-01-04
- Chip Bennett
-
Pointsjustes.Oui,j'aifait uneerreur dans la syntaxe.Sommes-nous sûrs qu'OP veut lamêmeimage ou uneimage différentepar catégorie?(C'est comme ça quej'ai compris).Je voulaisjusteproposer la solution laplus simple,bien que celaprenne la qu/réponse hors sujet.Fair points. Yes I made a mistake in the syntax. Are we sure OP wants the same image, or different one per category? (That's how I understood it). I just wanted to propose the easiest solution, although that does take the qu/answer off-topic.
- 0
- 2014-01-04
- JMB
-
Pas la solution queje cherchais carj'avais dit queje ne voulaispas utiliser defondet queje voudrais l'icône après letexte.Bien que cene soitpas un arrière-plan,il s'agittoujours d'uneimageet non de Font Awesome.Bonne solution,maispas la solutionpourmoi.Not the solution I was looking for as I had said I didn't want to use a background and that I would want the icon after the text. While it may not be a background, it's still an image, and not Font Awesome. Good solution, but not the solution for me.
- 1
- 2014-01-04
- MrJustin
-
- 2014-01-04
En supposant que vous souhaitiez utiliser l'icône
fa-chevron-right
,il vous suffit de cibler l'élément de liste via CSS. Utilisez lapseudo-classe:after
:.list-item:after { font-family: FontAwesome; // or whatever the font awesome family is registered as content: '\f054'; }
Modifier
Donc,pour donner uneidée de lafaçon dont vouspourriezpasser du CSS dynamique (quipeut êtrefacilement adapté à une option depluginpersonnalisée) via un rappel,voici unexemple:
(Remarque: "plugin"et "thème" sontinterchangeables ci-dessous.)
Tout d'abord,nous allonsmodifier le CSSpour cibler spécifiquement les éléments de liste à l'intérieur d'un widget. WordPress ajoute une classe,
.widget
,au conteneur Widget. Vouspouvez donc cibler cela:.widget .list-item:after {}
Ou,sitout cela doit êtreenveloppé dans unplugin quienregistre un widgetpersonnalisé,vouspouvez cibler la classe CSS que vous définissez dans votre widgetpersonnalisé,via letableau
$widget_ops
:$widget_ops = array( 'classname' => 'custom-widget-classname', 'description' => __( 'Custom Widget Description', 'namespace' ) );
Vouspouvez donc cibler cenom de classepersonnalisé:
.custom-widget-classname .list-item:after {}
Ou,si vous souhaitez cibler le widgetprincipal "Catégories",vouspouvez utiliser la classe
.widget_categories
. Nous allons utiliser cette approchepour l'exemple.Nous allons lemettre dans un callback,accroché à
wp_head
,bien que vouspuissieztout aussifacilement utiliserwp_print_styles
:function pluginslug_fontawesome_styles() { // Code will go here } add_action( 'wp_head', 'pluginslug_fontawesome_styles' );
À l'intérieur,nous allons simplement afficher unefeuille de style,avecnotre règle ci-dessus:
function pluginslug_fontawesome_styles() { ?> <script type="text/css"> .widget_categories .list-item:after { font-family: FontAwesome; // or whatever the font awesome family is registered as content: '\f054'; } </script> <?php } add_action( 'wp_head', 'pluginslug_fontawesome_styles' );
À ce stade,vous avezterminé. Peasyfacile. Mais,puisque vous êtes déjà dans unefonction PHP,vouspouvezfacilement rendre cettefeuille de style dynamique ,en utilisant une variable:
function pluginslug_fontawesome_styles() { // Define list-style icon variable $list_item_icon = '\f054'; // ...snip: content: <?php echo $list_item_icon; ?>;
Alorsmaintenant,ilest simple d'utiliser une valeur d'option Pluginpersonnalisée,simplementen lapassant à la variable:
function pluginslug_fontawesome_styles() { // Get Plugin options, assumed to be an array $plugin_options = get_option( 'pluginslug_plugin_options' ); // Define list-style icon variable $list_item_icon = $plugin_options['list_item_icon']; // Output stylesheet ?> <script type="text/css"> .widget_categories .list-item:after { font-family: FontAwesome; // or whatever the font awesome family is registered as content: <?php echo $list_item_icon; ?>; } </script> <?php } add_action( 'wp_head', 'pluginslug_fontawesome_styles' );
Alors c'esttout! CSS dynamique,produisant uneicône réelle (pas uneimage d'arrière-plan),tirant d'une option deplugin.
Et commeilne s'agit que de CSS,ilestfacilementextensible àpratiquementtous les sélecteurs que vouspouvezimaginer -pas seulement limité à un élément de liste à l'intérieur d'un widget.
Assuming that you want to use the
fa-chevron-right
icon, you simply need to target the list item via CSS. Use the:after
pseudo-class:.list-item:after { font-family: FontAwesome; // or whatever the font awesome family is registered as content: '\f054'; }
Edit
So, to give an idea of how you might pass dynamic CSS (which can be easily adapted to a custom Plugin option) via a callback, here's an example:
(Note: "plugin" and "theme" are interchangeable below.)
First, we'll modify the CSS to target list items inside of a Widget specifically. WordPress adds a class,
.widget
, to the Widget container. So you can target that:.widget .list-item:after {}
Or, if this will all be wrapped up in a Plugin that registers a custom Widget, then you can target the CSS class that you define in your custom Widget, via the
$widget_ops
array:$widget_ops = array( 'classname' => 'custom-widget-classname', 'description' => __( 'Custom Widget Description', 'namespace' ) );
So, you can target that custom classname:
.custom-widget-classname .list-item:after {}
Or, if you want to target the core "Categories" Widget, you can use the
.widget_categories
class. We'll go with that approach for the example.We're going to put it inside a callback, hooked into
wp_head
, though you can just as easily usewp_print_styles
:function pluginslug_fontawesome_styles() { // Code will go here } add_action( 'wp_head', 'pluginslug_fontawesome_styles' );
Inside, we're just going to output a stylesheet, with our rule from above:
function pluginslug_fontawesome_styles() { ?> <script type="text/css"> .widget_categories .list-item:after { font-family: FontAwesome; // or whatever the font awesome family is registered as content: '\f054'; } </script> <?php } add_action( 'wp_head', 'pluginslug_fontawesome_styles' );
At this point, you're done. Easy peasy. But, since you're already inside a PHP function, you can easily make this stylesheet dynamic, by using a variable:
function pluginslug_fontawesome_styles() { // Define list-style icon variable $list_item_icon = '\f054'; // ...snip: content: <?php echo $list_item_icon; ?>;
So now, it's a simple matter to use a custom Plugin option value, just by passing it to the variable:
function pluginslug_fontawesome_styles() { // Get Plugin options, assumed to be an array $plugin_options = get_option( 'pluginslug_plugin_options' ); // Define list-style icon variable $list_item_icon = $plugin_options['list_item_icon']; // Output stylesheet ?> <script type="text/css"> .widget_categories .list-item:after { font-family: FontAwesome; // or whatever the font awesome family is registered as content: <?php echo $list_item_icon; ?>; } </script> <?php } add_action( 'wp_head', 'pluginslug_fontawesome_styles' );
So that's it! Dynamic CSS, outputting an actual icon (not a background image), pulling from a Plugin option.
And since it's just CSS, it's easily extensible to pretty much any selector you can imagine - not just limited to a list item inside of a Widget.
-
Trèsbelle option,maisje voulais unefonction.:)Very nice option, but I wanted a function. :)
- 0
- 2014-01-06
- MrJustin
-
Vous savez que vouspouvezencapsuler les règles CSS dans un rappelet lesmettreen file d'attente à `wp_head` ou` wp_print_styles`,n'est-cepas?Mais cettepartie de lamiseen œuvreest une question distincteet en dehors de laportée de la questiontelle qu'elleest rédigée.You know that you can wrap up CSS rules in a callback, and enqueue at `wp_head` or `wp_print_styles`, right? But that part of the implementation is a separate question and outside of the scope of the question as-written.
- 0
- 2014-01-06
- Chip Bennett
-
Oui,je sais commentmettreen file d'attente.Cependant,je ne veuxpas utiliser CSS.Je sais que c'est unmoyen rapideet efficace de lefaire,et je vousfélicite à ce sujet ...maispeut-être queje devrais utiliser lesmots «besoin d'un» au lieu de «veux un» quandil s'agit de lafonction.Yes I do know how to enqueue. However, I don't want to use CSS. I know it's a quick and efficient way of doing it, and I do compliment you on that.. but maybe I should be using the words 'need a' instead of 'want a' when it comes to the function.
- 0
- 2014-01-06
- MrJustin
-
Veuillez consulter la questionmodifiée.J'ai ajouté unexemplepourmontrer commenttout celapeut vraiment êtregéré via CSS,demanière dynamique,extensibleet capable deprendreen compte les options deplug-inpersonnalisées.Please see the edited question. I added an example to show how the entire thing really can be handled via CSS, dynamically, extensibly, and able to account for custom Plugin options.
- 0
- 2014-01-07
- Chip Bennett
-
D'accord,maismaintenant,que sepasse-t-il sije voulais avoir l'icône **flottant ** à droite?Dansmon CSSnormal,je l'ai attaché à `li a: after {content}`et j'aiessayé: `text-align: right`et celan'a rienfaitpourmoi.Ce queje veux direpar là,pour clarifier,c'est que sepasserait-il sije voulaistoutes lesicônes à droite de la LI avec letexte àgauche.Disons que ul/li a été réglé à 250px,letexteesttoujours un lien,maisje l'aifaitbloquer.Ensuite,j'ai ajouté l '«icône»et je voulais que l'icône setrouve à droite du li.Avec le
je peuxfacilement lefaireflotter. Right, but now, what if I wanted to have the 'icon' **float** to the right? In my normal CSS I have attached it to `li a:after {content}` and tried: `text-align: right` and it did nothing for me. What I mean by this, to clarify, is what if I wanted all of the icons on the right of the LI with the text on the left. Say the ul/li was set to 250px, the text is always a link, but I had it set to block. Then I added the 'icon' and wanted the icon to sit to the right of the li. With theI can easily float it. - 0
- 2014-01-07
- MrJustin
-
Pour répondre à cette question spécifique: au lieu de `li a: after`,utilisez` li a:before`.Mais style/positionnement des éléments:en plus de connaître lebalisagefournipar WordPress (y compris les classes CSS spécifiqueset lebalisage HTML de la liste),ce sont des questions CSS/HTML.Faitintéressant,la réponse que vous avezmarquée comme acceptéen'utilise rien d'autre que du CSS.(Lafeuille de style Font Awesomemiseen file d'attente qui utilise la classe que vous ajoutez via le remplacement de chaîne utilise lapseudo-classe `: after`et l'attribut` content`pour afficher l'icône.)To answer that specific question: instead of `li a:after`, use `li a:before`. But style/positioning of elements: aside from knowing the markup provided by WordPress (including the specific CSS classes, and the list HTML markup), these are CSS/HTML questions. Interestingly, the answer you marked as accepted uses nothing other than CSS. (The enqueued Font Awesome stylesheet that makes use of the class you add via the string replacement uses the `:after` pseudo-class and the `content` attribute to output the icon.)
- 0
- 2014-01-07
- Chip Bennett
-
- 2014-01-04
Je leferais comme ceci:
// If you're using the widget only on specific pages, // you might want to use some appropriate conditions here add_action('wp_enqueue_scripts', function() { wp_enqueue_style('font-awesome', '//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css'); }); function wpse_128247_font_awesome_categories($cat_name) { // Define your desired icon here $icon = ' <i class="fa fa-smile-o"></i>'; return $cat_name.$icon; } // function wpse_128247_font_awesome_categories function wpse_128247_add_filter($cat_args) { add_filter('list_cats', 'wpse_128247_font_awesome_categories'); // Since we're hijacking this filter, we just pass through its data return $cat_args; } // function wpse_128247_add_filter add_filter('widget_categories_args', 'wpse_128247_add_filter'); function wpse_128247_remove_filter($output) { remove_filter('list_cats', 'wpse_128247_font_awesome_categories'); // Since we're hijacking this filter, we just pass through its data return $output; } // function wpse_128247_remove_filter add_filter('wp_list_categories', 'wpse_128247_remove_filter');
Tout d'abord,nousmettonsen file d'attente les stylesimpressionnants depolices. Ensuite,nous détournons certainsfiltrespour ajouter/supprimernotreproprefiltrepour la liste des catégories. Voilà.
//MODIFIER:
Sans les commentaires,adaptés aufait que vous avez déjàmis Font Awesomeen file d'attente,en utilisant desfermetureset en laissant lefiltre se supprimer,le code se lit comme suit:function wpse_128247_font_awesome_categories($cat_name) { remove_filter(current_filter(), __FUNCTION__); return $cat_name.' <i class="fa fa-smile-o"></i>'; } // function wpse_128247_font_awesome_categories function wpse_128247_add_filter($cat_args) { add_filter('list_cats', 'wpse_128247_font_awesome_categories'); return $cat_args; } // function wpse_128247_add_filter add_filter('widget_categories_args', 'wpse_128247_add_filter');
Jen'appelleraispas cela exagéré . Mais oui,mon code se compose deplus de lignes que la solution actuelle debirgire.
I would do it like this:
// If you're using the widget only on specific pages, // you might want to use some appropriate conditions here add_action('wp_enqueue_scripts', function() { wp_enqueue_style('font-awesome', '//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css'); }); function wpse_128247_font_awesome_categories($cat_name) { // Define your desired icon here $icon = ' <i class="fa fa-smile-o"></i>'; return $cat_name.$icon; } // function wpse_128247_font_awesome_categories function wpse_128247_add_filter($cat_args) { add_filter('list_cats', 'wpse_128247_font_awesome_categories'); // Since we're hijacking this filter, we just pass through its data return $cat_args; } // function wpse_128247_add_filter add_filter('widget_categories_args', 'wpse_128247_add_filter'); function wpse_128247_remove_filter($output) { remove_filter('list_cats', 'wpse_128247_font_awesome_categories'); // Since we're hijacking this filter, we just pass through its data return $output; } // function wpse_128247_remove_filter add_filter('wp_list_categories', 'wpse_128247_remove_filter');
First, we enqueue the font awesome styles. Then, we hijack some filters to add/remove our own filter for the category listing. That's it.
// EDIT:
Without the comments, adapted to the fact that you already have enqueued Font Awesome, using closures, and letting the filter remove itself, the code reads like the following:function wpse_128247_font_awesome_categories($cat_name) { remove_filter(current_filter(), __FUNCTION__); return $cat_name.' <i class="fa fa-smile-o"></i>'; } // function wpse_128247_font_awesome_categories function wpse_128247_add_filter($cat_args) { add_filter('list_cats', 'wpse_128247_font_awesome_categories'); return $cat_args; } // function wpse_128247_add_filter add_filter('widget_categories_args', 'wpse_128247_add_filter');
I would not call that overkill. But yes, my code consists of more lines than birgire's current solution.
-
Votre solutionn'étaitpasmauvaise,maisexagéréepar rapport à celle de Birgire.J'ai déjàmis Font-Awesomeen file d'attente,désolé dene pas l'avoir spécifié.Your solution wasn't bad, but an overkill compared to birgire's. I already have Font-Awesome enqueued, sorry I didn't specify.
- 0
- 2014-01-06
- MrJustin
-
Ouais,ce coden'estpasexcessif,je suis d'accord avec ça.Cela ressemblaitprobablement àplus avec les 4fonctions au lieu de 2,et la quantité de commentaires.J'apprécie les commentaires,je ne suispas d'accord.Cela ressemblait àbeaucoupplus :).Yeah, that code is not an overkill, I will agree with that. It probably just looked like more with the 4 functions instead of 2, and the amount of commenting. I appreciate the commenting, I'm not downing that. It just looked like a lot more :).
- 2
- 2014-01-07
- MrJustin
-
Puisque vous utilisez remove_filter sur lafonction qui ajoute l'icône,ellene s'exécutera qu'une seulefois.Cela signifie qu'uneicônene sera ajoutée qu'aupremier élément de la liste widget_categories.Since you are using remove_filter on the function that adds the icon it's only going to run a single time. This means an icon will only be added to the first item in the widget_categories list.
- 0
- 2020-05-12
- WPExplorer
J'utilise le widget Catégories surmesbarres latéraleset je souhaite afficher une icône Font Awesome à côté de chaque catégorie répertoriée dans le widget. L'icône serait lamêmepourtoutes les catégories,pour l'instant,maisj'aimerais donner à chaque catégorie sapropreicône unique à l'avenir.
Je voudraismodifier le widget Catégoriesen utilisant le code demonfichier functions.php pour ajouter l'icôneen insérant unbalisage comme
<i class="fa fa-chevron-right"></i>
dans l'élément lien/ancre de la catégorie après letitre de la catégorie. Jepourrais accomplir cela via CSS,mais cefaisant,je perds lapossibilité de déterminerparprogramme quelleicône afficher,ainsi que laflexibilitépour d'autres améliorations/modifications queje souhaiteraispeut-être apporter à l'avenir.Engros,je souhaite obtenir ceteffet:
(Le symbole supérieur à '>' représente l'emplacement de l'icônepar rapport autitre de la catégorie)
J'ai Font Awesomemisen file d'attente dans lefichier functions.php en utilisant le hook
wp_enqueue_scripts
comme suit,et il chargeet afficheparfaitement lesicônes. Notez queje n'utilise aucunplugin Font Awesome conçupour WordPress.Malgrémesmeilleursefforts de recherche,je n'aipasputrouver de solutionpourmodifier le widget des catégories.