1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【WordPress環境】highlight.jsで正しく文字を表示させる方法

Posted at

デイトラの上級編でhighlight.jsを使ってブログでコードを綺麗に表示するという課題あります。
こちらですが、実は受講しているとき飛ばした記憶があり人に教える場面があってちょっと詰まったのでサボった自戒を込めてこちらの記事を書いていきます。

#本記事のゴール
ブログでコードを書いた際に、下記のように色を付けて表示させる。
479474e80e70fc9648ad43ab3df2598f.png

#highlight.jsのインストールの方法
まずは、公式アカウントへアクセスします。
https://highlightjs.org/

29d141822abef9fa6d44ce5d23dd49d8.png

Get Version XXXXXXからダウンロードします。
執筆時には10.3.2でしたが、変わっていくのでここが違っていても気にしなくて問題ありません。

ここで必要な言語を選びますが、デフォルトのままでOKかと思います。
3b5171cf14b54cdf2d21da2d17eebc25.png

下にスクロールするとダウンロードがでてくるのでダウンロードしてください。
b96bd739b4679ee0e0b09a001887be34.png

必要なファイルはhighlight.pack.jsstylesのなかから一つ選んでください!
今回は、tomorrow-night-eighties.cssを使用します。
d295a6285e686768d148eab6ca3a5f36.png

#読み込みを行う
WordPressでcssとjsの読み込みを行います。

functions.php
  function my_script_init() {
    wp_enqueue_style('my', get_template_directory_uri() . '/css/style.css', array(), '1.0.0', 'all');
    wp_enqueue_style('my1', get_template_directory_uri() . '/css/tomorrow-night-eighties.css', array(), '10.3.2', 'all');
    wp_enqueue_script('my', get_template_directory_uri() . '/js/highlight.pack.js', array( 'jquery' ), '10.3.2', true);
    wp_enqueue_script('my1', get_template_directory_uri() . '/js/script.js', array( 'jquery' ), '1.0.0', true);
  }
  add_action('wp_enqueue_scripts', 'my_script_init');

ここでは、通常のstyle.cssscript.jsも読み込んでいます。
script.jshljs.initHighlightingOnLoad();を追加します。
これで、<pre><code>で囲んだエリアをハイライトしてくれます。

b1863ef1b69a2f1be04a5d4a48516791.png

#コードを書いてみる
いまの状態としては、<pre><code>で囲むとハイライトされる状態になっています。

表示の確認のため下記のように記載
7998e92e02602677b728c7f479c764e8.png

投稿画面から投稿
b1863ef1b69a2f1be04a5d4a48516791.png

実際の表示。single.phpに直接書いた<pre><code>ここにコードを記載</code></pre>がハイライトして
表示されているのが分かるかと思います。
3157c74b259dc6f3af624ba02ebe3562.png

#ショートコードの作成
毎回<pre><code>と書くのもめんどくさいので、ショートコードを登録します。

functions.php
function highlight_shortcode($class, $content = '')
{    //引数として$classと$contentを定義。
  return '<pre><code class = "' . $class['class'] . '">' . $content . '</code></pre>';    //引数で渡された$classと$contentが代入される。
}
add_shortcode('highlight', 'highlight_shortcode');

上記のように書くと、ショートコードに[highlight class="html"]XXXXX[/highlight] に記載すると
<pre><code>がはかれるように。引数のhtmlはcssやPHPなど中に表示するコードに合わせて書き換えてください。

#困ったこと
ショートコード に[highlight class="html"]<div>ここに何か書きますよ</div>[/highlight]を書いても、
<div>が表示されなくて困ったんですね。しかもなんか下に不要なものもついているし。。
213378892ae34c882c1b8fbe809bc0d9.png

結論として、https://tech-unlimited.com/escape.html を使って、文字を変換すると正しく表示をすることができるようになりました。
d5a86b53e813eadae7ca803208ffa77d.png

変換する
8a35369fe0880eb9c43aaf04ceaa31d6.png

表示。divが表示されるよになりました。
*htmlの文字に重なっているが、これは<br>などで調整する。
51d8376cc88fe597b2322188e81ca553.png

#まとめ
これで、綺麗にコードを表示できるようになりました。
結構ややこしくて理解までに時間がかかりますが、少しずつやっていくしかないですね。

エスケープ処理ってイマイチ理解できていないので、もう少し勉強します。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?