本サイトのWordpressの表示が乱れていることに気が付き、どこかファイルが壊れたかといろいろ四苦八苦したところ、どうもWordpressプラグインのCrayon Syntax HightlighterがPHP7.3で誤動作するのが問題のようだ(2019年版 Crayon Syntax Highlighterのエラー)。そういやレンタルサーバー側から先日7.2から7.3に上げると案内がきていた。Crayonは高機能なSyntax Hightlighterなので使っている人も多いようだが、すでにメンテされなくなって3年くらいたっている。代わりのプラグインを探したが、書式がコンパチというのは見当たらない。とはいえいまさら古いコンテンツをすべて書き換えるのも面倒なので、いろいろ探したところGithubで有志の方がメンテナンスされていたようだ(Release Crayon Syntax Highlighter & PHP 7.3 fix · Crunchify/crayon-syntax-highlighter · GitHub)。Wordpressのプラグインサイトには乗らないので、手動でアップデートが必要だがとりあえずこれでしのぐ。
さくらレンタルサーバがLet's encryptによるSSL化に対応したので、導入してみました。コントロールパネルのドメイン設定から選択するだけなのでかなり簡単です。https化で転送速度が遅くなるかなとも思いましたが体感速度は変わりありません。常時httpからhttpsへ転送するのは.htaccessを修正、Wordpressの場合はプラグインのほうでできるようです。ただの備忘録サイトなのでSSL化するメリットはないのですが気分です。
いままでTwitterにはNowPlayingしか投稿してなかったが、Wordpressへの投稿もTwitterと連動するようにした。プラグインはnextscriptを使った。このプラグインを使う場合、外部からAPIでTwitterに投稿できるようにAccessTokeとかの取得が必要だが、その発行に二段階認証登録されていることが前提となっている。ということで手持ちの携帯電話(AU)を使ったら、SMSは届くのだが届いたコードを入力しても認証されない。ネットで探すと電話番号頭に「0」をつけないで、とかの情報があったが、その場合はSMS自体が届かない。しかたなSMS付加している別のデータSIMのほうにする。なんか釈然としないけど、とりあえずいけてるからいいか。
なぜかWordpressだけ表示されなくなったのでプチ引っ越し。直前にデータをexportしてたので助かった。デザインはまだ素のままだが、ぼちぼち変更していく。ついでにsqliteの対応をPDOからSQLite Integration(ja)へ変更。
うちのWordpressはsqliteを使っているが、WordPressが4.4に上がってからどうも調子が悪いので、サーバーログを見てみると案の定エラーが多発している。一番大きかったのは、Error was no such table: wp_termmetaのエラー
とwp_termmetaがない!っのエラー。たぶんデータベース変換時にエラーがかかりこのテーブルを作成できなかったのだろう。WordPress › Support » WordPress 4.4 fatal errorなどをみると、wp_taxonomymetaを変換して作れとなっているが、sqliteではカラム名のリネームができないので、ちょっとやっかい・・・とりあえず無理やりSQLで新規に作って様子をみてみる(こればっかし)。とりあえずエラーログは出てないようだ・・
CREATE TABLE wp_termmeta ( meta_id INTEGER PRIMARY KEY AUTOINCREMENT, term_id INTEGER NOT NULL default '0', meta_key varchar(255) default NULL, meta_value text ) ;
ちなみにオリジナルはscheme.phpにある
$blog_tables = "CREATE TABLE $wpdb->termmeta ( meta_id bigint(20) unsigned NOT NULL auto_increment, term_id bigint(20) unsigned NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (meta_id), KEY term_id (term_id), KEY meta_key (meta_key($max_index_length)) ) $charset_collate;
(一部phpが入っているが、気にしない・・)
どうもこのmysql方式のsql文はpdo_sqlite_driver*.
このサイトはwordpressをsqliteで運用しているが、前々からサーバーのエラーログにエラーメッセージが出るのが気になっていた。まあ動いてる からいいかと思っていたが、たまにトップページのリクエストに1回目だけ失敗しているのがこれのせいではないかと最近気が付いた(遅い)その4つめ
エラーログはこんな感じ。
Error message was: Problem preparing the PDO SQL Statement. Error was near "7": syntax error
”7”の付近でsyntax errorといわれている。該当行は/wp/wp-includes/post.php内で
$old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = 'auto-draft' AND DATE_SUB( NOW(), INTERVAL 7 DAY ) > post_date" );
でDATE_SUBとINTERVALをつかっているが、これはsqliteにないので data(..)をつかう。
$old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = 'auto-draft' AND DATE('now', '+ 7days' ) > post_date" );
これで様子をみる。
こ のサイトはwordpressをsqliteで運用しているが、前々からサーバーのエラーログにエラーメッセージが出るのが気になっていた。まあ動いてる からいいかと思っていたが、たまにトップページのリクエストに1回目だけ失敗しているのがこれのせいではないかと最近気が付いた(遅い)その3つめ
エラーログはこんな感じ。
Error message was: Problem preparing the PDO SQL Statement. Error was no such column: false
sqliteにはboolean型がないので、"false"なんてカラムがないよ!といわれている。該当行は/wp/includes/user.php内で
$select_count[] = $wpdb->prepare( "COUNT(NULLIF(meta_value LIKE %s, false))", '%' . $wpdb->esc_like( '"' . $this_role . '"' ) . '%');
でfalseをつかっている。これを0に変える。
$select_count[] = $wpdb->prepare( "COUNT(NULLIF(meta_value LIKE %s, 0))", '%' . $wpdb->esc_like( '"' . $this_role . '"' ) . '%');
これで様子をみる。
こ のサイトはwordpressをsqliteで運用しているが、前々からサーバーのエラーログにエラーメッセージが出るのが気になっていた。まあ動いてる からいいかと思っていたが、たまにトップページのリクエストに1回目だけ失敗しているのがこれのせいではないかと最近気が付いた(遅い)その2つめ
エラーログはこんな感じ。
Error message was: Problem preparing the PDO SQL Statement. Error was a GROUP BY clause is required before HAVING
どうもsql構文で"HAVINGの前にはGROUP BYがいるで"と出ているようだ。該当行は/wp-admin/includes/template.php内で
$sql = "SELECT DISTINCT meta_key FROM $wpdb->postmeta WHERE meta_key NOT BETWEEN '_' AND '_z' HAVING meta_key NOT LIKE %s ORDER BY meta_key LIMIT %d";
ってな感じ。たしかにGROUPがないのにHAVINGは意味ないと思い、WHEREで統合。
$sql = "SELECT DISTINCT meta_key FROM $wpdb->postmeta WHERE (meta_key NOT BETWEEN '_' AND '_z') AND (meta_key NOT LIKE %s) ORDER BY meta_key LIMIT %d";
これで様子をみる。
思い立ってタイトルに日めくり風の日付を入れる。よく書いた日付がわからないブログがあって難儀するが、大きく日めくり風の日付表示をしているブログがなんか気に入ったので、真似てみる。あまりテーマを直接いじりたくなかったが、よいプラグインもなかったのでテーマを編集するしかなさそうだ。つかっているテーマはTwentyTenなので記事の表示はloop.phpとloop-singleのなか。
HTMLは
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <!--modidy start--> <div class="postday"><div class="month"><?php the_time('m') ?></div><div class="day"><?php the_time('d') ?></div></div> <!--modify end--> <h2 class="entry-title"><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
CSSはCustom CSSを使っているのでプラグインからだが、style.cssでもいい。
div.postday { display: inline-block; font-size: 1em; line-height: 1em; height:3em; width:2em; float: left; border-top: 1px Solid black; border-left: 1px Solid black; border-bottom: 2px Solid black; border-right: 2px Solid black; border-radius: 0 0 10px 0; vertical-align: top; background-color: white; padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; } div.
HTML上で数式が表示できるMathJaxをいれてみた。
$begin{align} f(x) & = (a+b)^2 \ & = a^2+2ab+b^2 \ end{align}$
という感じです。結構きれいですね。Latexで論文を書いたときのことを思いだします。WordPress用プラグインとかもあるようですが、基本はヘッダに
<script type=”text/javascript” src=”http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML”></script>
と追記するだけで、HTML中のLatexの書式を変換してくれます。
常時いれてたら重いかなぁ。詳しくは本家サイト:MathJax.orgや紹介サイト:MathJaxの使い方をご覧ください。