Ursprünglich im Februar 2014 veröffentlicht, jetzt aktualisiert/korrigiert/erweitert.
Sie haben also WordPress installiert und möchten über Code bloggen. Juhu! Sie sind ein Held und ich danke Ihnen im Namen von mir und allen Codern auf der ganzen Welt. Hier sind die Dinge, die Sie tun und bedenken müssen, um tatsächlich Code-Blöcke zu veröffentlichen.
Das HTML für einen „Code-Block“
Es gibt ein Element speziell für Code: <code>. Ich würde sagen, es ist semantisch korrekt, jeden Code darin einzuschließen. Die Standard-Stylesheets der Browser belassen es als Inline-Element, und ich würde empfehlen, es dabei zu belassen, damit Sie es innerhalb von Sätzen verwenden können, so wie ich es im letzten Satz getan habe.
Aber Sie werden ein Block-Level-Element verwenden wollen, um einen Code-Block einzuschließen. <pre> ist das perfekte Element dafür, da es automatisch Leerzeichen beibehält. „Pre“ steht für „Vom Benutzer vorformatierter Text“. Mehrere Leerzeichen werden als mehrere Leerzeichen dargestellt, anstatt zu einem einzigen Leerzeichen zusammenzufallen, wie es normalerweise in HTML geschieht. Das ist perfekt für Code, da Sie wahrscheinlich Einrückungen in einem Code-Block verwenden möchten und keine -Tricksereien anwenden möchten.
Also
<pre><code>Your
block
of
code
here.</code></pre>
Schalten Sie den „Visuellen“ Editor aus
Standardmäßig können Sie in WordPress zwischen den Tabs „Visuell“ und „Text“ im Editor wechseln.

Für Sie muss der visuelle Editor weg. Sie werden ihn nie benutzen. Sie möchten die volle Kontrolle über den Text, den Sie schreiben, und möchten, dass er so bleibt, wie Sie ihn schreiben, wenn Sie ihn speichern.
Schalten Sie ihn unter Benutzer > Ihr Profil aus

Werden Sie in Markdown bloggen oder nicht?
Hier auf CSS-Tricks mache ich das nicht, aber wenn ich in die Vergangenheit zurückgehen könnte, würde ich es wahrscheinlich tun. Auf den meisten meiner späteren Blogs verwende ich Markdown und bevorzuge es. Wenn Sie das tun möchten, empfehle ich die Markdown-Funktion von Jetpack.
Um einen Code-Block in Markdown zu posten, müssen Sie diesen Code auf jeder einzelnen Zeile vier Leerzeichen einrücken, so:
Yadda yadda yadda. I'm a *paragraph* in Markdown. Here's a [link to Google](http://google.com). Here's a block of code:
<div>
<p>I'm some code.</p>
<div>
Another paragraph here.
Das manuell zu tun, wird sehr schnell ermüdend. Sie möchten also Ihre Editor-Buttons durch Markdown-Buttons ersetzen. Es sieht so aus, als ob das Plugin Markdown Quicktags das tun kann.

Das Coole an der Verwendung von Markdown ist, dass Sie sich nicht um das Escaping des Codes kümmern müssen. Diese spitzen Klammern stellen also keine Bedrohung mehr dar, Markdown maskiert sie für Sie. Mit anderen Worten, all diese spitzen Klammern (<) im obigen HTML-Beispiel werden in < umgewandelt und somit auf dem Bildschirm als spitze Klammer angezeigt, anstatt den Browser zu verwirren, indem er denkt, ein HTML-Tag kommt.
Dieses Markdown-Beispiel wird in Folgendes umgewandelt, bevor es den Browser erreicht
<p>Yadda yadda yadda. I'm a <em>paragraph</em> in Markdown. Here's a <a href="http://google.com">link to Google</a>. Here's a block of code:</p> <pre><code><div> <p>I'm some code.</p> <div></code></pre> <p>Another paragraph here.</p>
Wenn Sie daran interessiert sind, in Markdown zu bloggen, haben Sie einige Optionen. Jetpack, das von Automattic entwickelte und gepflegte Plugin, bietet es jetzt an als Teil seines Mega-Pakets an Angeboten. Derzeit verwende ich WP-Markdown hier auf CSS-Tricks (ich weiß, ich sagte, ich benutze kein Markdown, aber ich tue es für die Foren und Kommentare, nur nicht zum Bloggen).
Zwei, die ich persönlich noch nicht ausprobiert habe, sind Typewriter und Markdown on Saved Improved.
Es gibt hier jedoch eine ziemlich große Einschränkung. Beachten Sie, dass die Einrückung mit vier Leerzeichen in einen <pre><code>-Block umgewandelt wird, aber es gab keine Möglichkeit, diesen Tags Attribute hinzuzufügen. Attribute (wie Klassen und data-* Attribute) sind ein häufiger Bedarf. Sie möchten vielleicht einen Syntax-Highlighter verwenden (darüber sprechen wir später), der einige Attribute benötigt, um seine Funktion zu erfüllen. Oder Sie möchten den Code-Block irgendwie nach Sprache identifizieren.
Bequemer als Einrückungen, viele „Sorten“ von Markdown (einschließlich der Jetpack-Version) unterstützen Code Fencing, d.h. das Einbetten von Code-Blöcken in dreifache Backticks
```
<div>
<p>I'm some code.</p>
<div>
```
Ich nenne das gerade heraus besser. Es ist einfacher, beim Schreiben in einen Code-Block zu springen, ohne sich um die Einrückung kümmern zu müssen. Außerdem hat Code seine eigene Einrückung, daher ist es schön, bündig mit links zu beginnen.
Sie können die Sprache auch direkt in der Markdown-Syntax angeben. Unser Beispiel könnte also lauten
```html
<div>
<p>I'm some code.</p>
<div>
```
Was ergibt
<pre><code class="html"><div> <p>I'm some code.</p> <div> </code></pre>
Wenn Sie KEIN Markdown verwenden, müssen Sie den Code escapen.
CSS-Codeblöcke müssen selten escaped werden, aber HTML definitiv, und JavaScript enthält manchmal HTML (sowie fast alle Backend-Sprachen), also können Sie genauso gut davon ausgehen, dass Sie allen Code escapen müssen.
Sie könnten es manuell tun, indem Sie alle <-Zeichen in <-Zeichen umwandeln, aber das würde Sie verrückt machen. Sie könnten ein Tool wie Postable verwenden, um Blöcke zum Escapen zu kopieren und einzufügen, aber das ist auch langsam und mühsam.
Ich bevorzuge die Verwendung eines Plugins namens Code Markup dafür. Es escaped einfach automatisch alles, was es innerhalb von <code>-Tags findet, sodass Sie nie darüber nachdenken müssen.
Da ich dieses Plugin auf dieser Website verwende, kann ich Dinge tun wie
<pre data-lang="HTML"><code class="language-markup"><div>
<p>I'm some code.</p>
<div></code></pre>
Und es funktioniert großartig. Kein Escaping. Volle Attributkontrolle.
Syntax-Highlighting handhaben
Denken Sie daran, dass eine Option für Syntax-Highlighting von Code-Blöcken kein Syntax-Highlighting ist. Das wäre sicherlich der schnellste und einfachste Weg. Aber Sie möchten es vielleicht. Persönlich mag ich es. Ich mag die Art, wie es aussieht. Hier sind einige Optionen.
Im Wesentlichen geschieht bei jedem Syntax-Highlighter, dass Code-Schnipsel in <span>s mit Klassennamen verpackt werden, die Sie mit CSS einfärben. Die Wahl hängt von den Funktionen ab.
Prism.js
Hier auf CSS-Tricks verwende ich (und empfehle) Prism von Lea Verou, da es sofort damit funktioniert. Es ist klein, schnell und (mein Favorit) hat rationale Klassennamen für das Styling. Sie wählen aus, welche Sprachen es unterstützen soll, wenn Sie es herunterladen.
Ich verwende auch dieses Escaping-Plugin, was bedeutet, dass ich HTML in Code-Tags nicht escapen muss, also sieht es wieder so aus
<pre><code markup="tt" class="language-markup"><div>
<p>I'm some code.</p>
<div></code></pre>
Diese class="language-markup" auf dem Code-Tag ist das, was Prism zur Syntax-Hervorhebung erkennt. Es funktioniert standardmäßig automatisch für allen Code, den es mit diesem Klassennamen-Muster findet, aber Sie können stattdessen die API verwenden, wenn Sie Ihr eigenes Ding machen möchten.
Prettify
Ein extrem beliebtes ist google-code-prettify. Um einen Block zu syntaxhervorzuheben, setzen Sie class="prettyprint" auf das Code- oder Pre-Tag.
Es ist eine größere Dateigröße als Prism, aber ein Vorteil ist, dass es die Sprache automatisch erkennt (und viele Sprachen unterstützt), sodass es bei fast allem funktionieren sollte, ohne dass Sie es angeben müssen.
Andere
Wenn man ein wenig recherchiert, gibt es viele weitere, die ich nicht verbürgen kann, aber die anscheinend die Arbeit erledigen: Rainbow, SyntaxHighlighter, Chili (jQuery), JSHighlighter, jQuery.Syntax (jQuery), GeSHi, Lighter (MooTools), highlight.js, SHJS und Pygments (Python).
Entscheidung
Um unter diesen zu entscheiden, könnten Sie über diese Dinge nachdenken
- Welche Sprachen muss ich hauptsächlich unterstützen?
- Möchte ich Zeilennummern anzeigen?
- Muss ich Links innerhalb des Codes einfügen?
- Möchte ich Teile des Codes oder Zeilen hervorheben können?
- Habe ich alte Codeblöcke, die ich unterstützen muss? In welchem Format liegen sie vor?
- Ist der Code einfach zu kopieren und einzufügen? Möchte ich Funktionen, die dabei helfen?
- Ist clientseitiges Syntax-Highlighting in Ordnung oder soll es serverseitig erfolgen?
Codeblöcke visuell identifizieren
Ich denke, es ist eine nette Geste, auf einen Blick sehen zu können, welche Art von Code ein Code-Block ist. Auf dieser Website mache ich das über ein Attribut im Block selbst und style dann den Wert dieses Attributs als Teil der Anzeige. Sie können es in Aktion sehen in den meisten Code-Blöcken hier (vorausgesetzt, Sie betrachten die Website selbst und lesen sie nicht woanders).
Hier erfahren Sie, wie Sie ein bestimmtes Attribut eines Code-Blocks visuell anzeigen können (das Styling liegt ganz bei Ihnen!)
pre[data-language-display]:before {
content: attr(data-language-display);
}
Umgang mit Legacy-Code
Wenn Sie bereits viele Code-Blöcke auf einer Website haben, empfehle ich dennoch, einen Syntax-Highlighter zu wählen, dessen Funktionen Sie für die aktuelle und zukünftige Verwendung mögen. Finden Sie dann einen Weg, ihn für die älteren Blöcke zu verwenden.
Nehmen wir zum Beispiel an, ich habe einen Legacy-Code-Block, der so markiert ist:
<pre><code class="javascript">
var thing = document.getElementById("thing");
</code></pre>
Das ist nicht der richtige Klassenname für Prism. Also könnte ich jQuery verwenden, um etwas wie Folgendes zu tun:
$("code.javascript")
.removeClass("javascript")
.addClass("language-javascript");
Und stellen Sie sicher, dass dieser JavaScript ausgeführt wird, bevor Prism. Ich könnte auch die Gelegenheit nutzen, um den Code mit $.trim() zu bearbeiten, denn wie oben geschrieben, gibt es oben und unten eine zusätzliche Rückgabe, die das Styling des Code-Blocks beeinträchtigen könnte.
Ich meine das nur als Beispiel. Der allgemeine Punkt ist: Sie können die Legacy-Codeblöcke nach Bedarf manipulieren, um sie an das neue Format anzupassen.
Verwendung eines Plugins
Es gibt viele, viele Plugins dafür. Dieser Beitrag konzentriert sich hauptsächlich darauf, dies selbst zu handhaben, da dies im Allgemeinen die Art von Kontrolle ist, die ich mag. Aber ich bin sicher, es gibt viele gut gemachte Plugins dafür. Ich fürchte, ich kann keines empfehlen, aber dies ist, wonach ich suchen würde:
- Gute Bewertungen / Ratings / Sieht aus, als wäre es aktualisiert
- Zwingt Sie nicht, seltsame / proprietäre Dinge mit Code-Blöcken zu tun. Zum Beispiel ein [Shortcode] verwenden. Das bindet Sie für immer an dieses Plugin.
- Unterstützt die Sprachen und Funktionen, die Sie benötigen (und nur die Dinge, die Sie brauchen, lädt nicht alles unter der Sonne).
Hilfe von Drittanbietern
Bei der Erstellung der Funktion Embedded Pens auf CodePen wussten wir, dass die Anzeige von Demos und Code in Blogbeiträgen eine ziemliche Qual ist, also haben wir uns bemüht, das einfacher zu machen.
Hier ist ein Beispiel für einen eingebetteten Pen, der standardmäßig den CSS-Code anzeigt
See the Pen Dynamic Image Colorizing with by Noah Blon (@noahblon) on CodePen.
Ich muss mich nicht um Syntax-Highlighting, Escaping oder irgendetwas kümmern und habe den Vorteil, auch die gerenderte Demo anzuzeigen.
Viele der anderen Code-Editor-Seiten bieten auch eingebetteten Code an, wie JSFiddle und JSBin. GitHub Gists können hierfür ebenfalls nützlich sein. Vielleicht mein Lieblingsgrund für die Verwendung von Drittanbieter-Tools: Sie können die Demo dort aktualisieren und der Blogbeitrag hat automatisch den neuen Code. Sie müssen nicht an zwei Stellen aktualisieren.
Haben Sie Ihre eigene Methode, um Codeblöcke auf einer WordPress-Seite zu verwalten? Teilen Sie sie gerne mit.
Guter Beitrag, Chris. Nur eine Anmerkung, das Markdown-Modul von Jetpack ist auch Github-flavored, so dass Sie Backticks verwenden können, um Code darin einzuschließen. Hier ist der Originalbeitrag über Markdown-Unterstützung für WordPress.com. Es ist dasselbe Modul, das Jetpack verwendet.
Ich benutze derzeit Crayon auf meiner Website, aber ich mache mir etwas Sorgen über die Menge an JS/CSS, die es einfügt. Es entfernt auch die <code>-Tags, was mich etwas ärgert.
@briankrosgard – das sind tolle Informationen, ich wusste nicht, dass Jetpack GitHub-flavored MD unterstützt, sehr nützlich :)
Gleich hier, ich habe gerade (wieder) mit einem neuen Blog angefangen und ich benutze auch Crayon. Obwohl ich das Aussehen mag, ist es auch ein vollständiger Overkill an Funktionalität und Optionen. Ich denke, ich werde bald zu etwas leichterem wechseln, solange ich es noch einfach tun kann.
Wenn Sie auf der Suche nach einem leichten, gut gestalteten Plugin für Code-Snippets sind, schauen Sie sich mein Plugin an: http://wordpress.org/plugins/jsj-code-highlight/.
Es folgt im Grunde demselben Workflow, der im Beitrag beschrieben wird, und verwendet jQuery, um einige Divs hinzuzufügen.
Ich habe es geschrieben, nachdem ich erkannt habe, dass alle WordPress-Plugins für Code (meiner Meinung nach) nicht sehr gut sind!
Das hätte nicht zu einem besseren Zeitpunkt kommen können. Ich wollte das schon lange wissen. Vielen Dank, dass Sie das geteilt haben, Chris!
Eine weitere Lösung ist die Verwendung von benutzerdefinierten Meta-Feldern. Sie können Plugins wie Simple Fields oder Advanced Custom Fields verwenden, um Ihre "Code-Container" zu erstellen. Dann fügen Sie sie mit einem Shortcode in Ihren Beitrag ein. Eine sehr saubere Lösung.
Ich suchte gerade nach einer guten Syntax-Highlighting-Lösung, anscheinend wird Prism von Lea die Arbeit tun. Danke Chris :)
Ich habe gestern wörtlich diese Frage an dich getwittert :) Es hat eine Weile gedauert, aber ich konnte feststellen, dass du prismjs auf deiner Website verwendest. Ich schreibe gerade ein Plugin dafür (die vorhandenen Prism-Plugins sind nicht so gut).
Vielen Dank, dass Sie das trotzdem teilen!
Hallo Chris, schöner Beitrag, ich habe eine Frage, die damit zusammenhängt: Wie escaped man HTML- und JS-Code wie auf CodePen? Benutzt du nur
sanitize_text_field? Kannst du bitte eine klare Antwort geben, dankeHallo Chris,
Toller Beitrag.
Ich wollte Sie tatsächlich fragen, was Sie auf diesem Blog für die Syntax-Hervorhebung verwenden. Ich habe mich in einem Projekt, an dem ich gearbeitet habe, für prettify entschieden. Eine Sache, die mir an prettify nicht gefallen hat, ist, dass man in der Gestaltung eingeschränkt ist und einige Codes nicht richtig hervorgehoben wurden. Ich schaue mir jetzt prism an, danke für den Tipp!
Hallo Chris, ich bin ein regelmäßiger Besucher von css-tricks und jetzt ist es an der Zeit, Ihre Bemühungen in der Webentwicklung zu würdigen. Vielen Dank, dass Sie jungen Leuten wie mir helfen ... nochmals vielen Dank und machen Sie weiter so.
Schöner Artikel! Wollte Sie nur wissen lassen, dass Sie vielleicht vergessen haben, die
<code>und<pre>Tags in einem Ihrer Codeblöcke zu schließen (dem, der auf „Dieser Markdown-Beispiel wird in Folgendes umgewandelt, bevor es den Browser erreicht:“ folgt).Vor ein paar Monaten bin ich von manuellen Codeausschnitten (einer für HTML, einer für CS, einer für JavaScript) auf CodePen-Embeds umgestiegen. Viel einfacher. Liebe die Optionen, es an die Website anzupassen. Großartige Arbeit!
Ich bin mir nicht sicher, ob ich das Richtige tue, aber das ist, was ich auf meinem Blog mache
Für Inline-Code
Um HTML zu escapen, kopiere ich normalerweise den Codeblock in einen Texteditor, drücke Strg+H (Suchen und Ersetzen) und ersetze alle
<durch<, dasselbe für>(in>) und&(in&).Wenn Sie Demos und Code in Blogbeiträgen anzeigen (die verwendet werden können oder den Fluss des Inhalts nicht beeinträchtigen), sollten Sie
<pre><code>...</code></pre>in ein<figure>(mit optionalem<figcaption>) wrappen.http://www.w3.org/TR/html5/grouping-content.html#the-figure-element
Wir haben gerade angefangen, CodePens auf unserem Blog zu verwenden, bevor ich von Ihrem neuen WP-Plugin erfahren habe, haben wir unseren eigenen Shortcode erstellt. Jeder Entwickler hat ein CodePen-Profil, das mit seinem Benutzerkonto verknüpft ist, sodass der Shortcode einfach den Slug nehmen kann
Shortcode PHP Auszug
Wir haben ein paar andere optionale Parameter für Höhe und die Auswahl eines anderen Benutzers als des Beitragsautors hinzugefügt.
Dies stellt sicher, dass wir immer das gleiche CodePen-Theme auf unserer Website beibehalten. Was für CodePen großartig wäre, wäre eine Art Organisationskonto oder eine direktere Möglichkeit, Themes zu erstellen und zu speichern, aber das funktioniert derzeit gut für uns.
Ich benutze Prism, habe aber ein Problem, dass Leerzeilen aus meinen Javascript-Beispielen entfernt werden.
Irgendwelche Ideen?
Crowd Favorite’s Capsule Theme ist ein schöner Frontend-Editor für Github-flavored Markdown.
Ich habe es kürzlich installiert, um die Funktionalität von Gistbox (über Gists) und Pastebin zu ersetzen. So habe ich meine eigene gehostete Code-Snippet-Bibliothek, z. B. code.damoncook.net
Bonus, Sie können Capsule Server einrichten, um eine synchronisierte Snippet-Bibliothek für die Teamkollaboration zu haben.
Nach viel Testen und Recherche habe ich mich für die Verwendung des SyntaxHighlighter Evolved Plugins für WordPress entschieden. Es erlaubt Ihnen, Ihren Code in [php][/php]-Tags einzuschließen, was im Backend schön und sauber ist.
Es funktioniert ziemlich gut auf http://www.epicwebs.co.uk.
Sie können auch einfach einen Gist posten und fertig :)
Sicher, was großartig sein kann. Denken Sie daran, dass Leute, die Ihren RSS-Feed abonniert haben (WordPress erstellt automatisch Feeds für Sie, ein Grund, warum Sie vielleicht WordPress verwenden), nichts sehen werden.
Hallo,
Ich habe alle Ihre Markdown-Vorschläge ausprobiert und festgestellt, dass nur das Plugin markdown-quicktags gut mit prism und wp-gfm zusammenarbeitet.
Ich dachte, ich lasse es Sie wissen
Genau das Problem, das ich zu lösen versucht habe. Danke!
Danke Chris, dass Sie die Verwendung von WordPress-Codes vereinfacht haben.
Ich habe keinen WordPress-Blog. Gibt es ein anderes Standard-Highlighter-Plugin, das ich auf meinem eigenen CMS verwenden kann? Es gibt so viele Optionen für Standalone-Code-Highlighter, und ich recherchiere immer noch, welches das beste wäre. Danke!
Zu viele Informationen für mich. Ich suche nach einer einfachen Lösung, um HTML-Codes zu meinen Beiträgen hinzuzufügen.
Ich habe Postable ausprobiert. Es funktioniert gut, ist aber mühsam, es jedes Mal zu benutzen, wie Sie sagten.
Danke
Oder Sie könnten die empfohlenen Methoden verwenden
http://en.support.wordpress.com/code/posting-source-code/
Das ist für WordPress.com, mit nur einer Erwähnung eines Plugins am Ende. Dies behandelt das und eine Menge anderer Überlegungen, über die Sie vielleicht nachdenken möchten, für einen selbst gehosteten WordPress-Blog.
Vielen Dank, dass Sie mir den genauen Weg gezeigt haben, wie man das Pre-Tag im WordPress-Editor verwendet. Ich werde es ausprobieren und hoffe, dass es funktioniert. :)
Hallo,
Schöner Artikel, aber ich habe Probleme mit der Anzeige in
<pre>oder<code>. Es zeigt immer die Eingabe und zerstört den Rest des Codes.Wo liegt das Problem?
Danke
Wenn Sie öffentlichen Code auf einer Website posten, warum nicht gist verwenden? WordPress kommt meines Wissens jetzt mit OEmbed-Unterstützung für gist, wenn nicht, ist es wie ein Plugin mit < 10 Zeilen Code und hat diese Vorteile:
Sie entwickeln Ihr eigenes nicht
Sie haben einen Ort, an dem Sie sinnvolles Feedback zum Code erwarten, mit Zeilenreferenzen, Kommentaren zum Code, der Möglichkeit für andere, ihn zu forken usw.
Der Code auf der Seite wird mit dem Gist aktualisiert, sodass Ihre Benutzer nicht mit veraltetem Unsinn dastehen.
Sie können die Ausgabe stylen, da es sich nicht um einen iframe handelt (wie ich Ihnen bereits geschrieben habe, hat CSS-Tricks eine CSS-Regel, die nicht spezifisch genug ist, und hat einen Gist, den ich gepostet habe, schlecht aussehen lassen, ich bin mir nicht sicher, ob sie im Re-Theme behoben wurde).
Diese Verwendung von Datenattributen für Metadaten ist fantastisch, ich kannte die attr()-Funktion in CSS nicht.
Dies stellt sicher, dass wir immer das gleiche CodePen-Theme auf unserer Website beibehalten. Was für CodePen großartig wäre, wäre eine Art Organisationskonto oder eine direktere Möglichkeit, Themes zu erstellen und zu speichern, aber das funktioniert derzeit gut für uns.