マイ忘備録

フィリピン関連のメモ、ワードプレス関連のメモなど

sitemapショートコード

Cocoonではサイトマップを"[sitemap]"と書くだけで表示する便利なショートコードがある。
参考 簡単なサイトマップページを生成できるsitemapショートコードの使い方 | Cocoon

ワードプレスの勉強がてら、このショートコードをコピペ改造してみた。

1. ソースを読む

オリジナルのsitemapショートコードのソースは以下のsitemap_shortcode関数だ
参考 https://github.com/yhira/cocoon/blob/master/lib/shortcodes.php#L387

知らない処理をググって調べた見た

ob_start() / return ob_get_clean()

これは結果の出力をキャッシュする操作のようだ。これをしないと、目次がうまく表示されなかったりするみたい
参考 PHPのob_startでまとめて結果出力

<?php _e( 'ほげほげ', THEME_NAME ) ?>

これは国際化(日本語以外でも表示)処理用の書き方のようだ。
THEME_NAMEはCocoonで以下のように定義されている。

define('THEME_NAME', 'cocoon');

練習で作るショートコードではこれは無視でいいかな。
参考 関数リファレンス/ e - WordPress Codex 日本語版

テンプレート関数

wp_list_pages
wp_get_archives
wp_list_categories
wp_get_archives
このあたりを呼び出して簡単に表示している。

2. 改造する

カテゴリーと月別アーカイブに件数表示を追加。あと、タグ一覧も表示するように改造してみた。

カテゴリーに件数表示

wp list categoriesで引数show_count=trueを渡すと件数が表示される。

<?php wp_list_categories('show_count=true&title_li='); ?>


こんな感じでカッコで件数が付く

カテゴリー1(10)
カテゴリー2(5)

参考 テンプレートタグ/wp list categories - WordPress Codex 日本語版

月別アーカイブに件数表示

月別アーカイブの件数表示も似た感じ。wp get archivesで引数show_post_count=trueを渡すと件数が表示される。

<?php wp_get_archives('type=monthly&show_post_count=true'); ?>

参考 テンプレートタグ/wp get archives - WordPress Codex 日本語版

カッコが消える処理の対処

Cocoonではウィジット上での件数表示のスタイルのために、このカッコを除去する処理が行われている。
参考 投稿数に付加されるカッコを除去するカスタマイズ方法

add_filter( 'wp_list_categories', 'remove_post_count_parentheses' );
add_filter( 'get_archives_link',  'remove_post_count_parentheses' );

style.cssにうまいこと記述するとキレイに表示されるようだが、固定ページ上で試してるためか?何だかうまくいかなかったので、とりあえず自分が利用するサイトマップページ上では、この処理を無効ににしてカッコが表示されるように戻してみた↓かなり場当たり的な対処な気はする。

remove_filter( 'wp_list_categories', 'remove_post_count_parentheses' );
remove_filter( 'get_archives_link',  'remove_post_count_parentheses' );

タグ一覧の表示

タグ一覧は上のソースコードにないので、他からサンプルを拾ってきた。
一番簡単そうなのは、wp_tag_cloud()の引数にformat=list(リスト表示)、show_count=true(件数表示)とかすれば表示される

<?php wp_tag_cloud('format=list&show_count=true&smallest=11&largest=11'); ?>

だが、この方法だと何か他の一覧と見栄えが違う(文字の大きさだけじゃなくてスタイルが違う?)ので、get_tags関数を利用することにした。以下からコピーしただけ。
参考 WordPressでタグの一覧をリスト表示させる方法 | TechMemo

3. 実行する

コピペ改造したコードが以下になります。2段表示するため、2つに分けた。

//============================================
//サイトマップAショートコード関数(カテゴリー、タグ、月別アーカイブ)
//============================================
add_shortcode('my_sitemap', 'my_showSitemap');
function my_showSitemap() {

  remove_filter( 'wp_list_categories', 'remove_post_count_parentheses' );
  remove_filter( 'get_archives_link',  'remove_post_count_parentheses' );

  ob_start();?>

  <h2>カテゴリー</h2>
  <ul><?php wp_list_categories('show_count=true&title_li='); ?></ul>
  <h2>タグ</h2>
  <ul>
  <?php
    $posttags = get_tags();
    if ($posttags) {
      foreach($posttags as $tag) {
        echo '<li><a href="'. get_tag_link($tag->term_id) .'">' . $tag->name . '</a> ('. $tag->count .')</li>';
      }
    }
  ?>
  </ul>
  <h2>月別アーカイブ</h2>
  <ul><?php wp_get_archives('type=monthly&show_post_count=true'); ?></ul>

  <?php return ob_get_clean();
}

//============================================
//サイトマップBショートコード関数(固定ページ、ABC順)
//============================================
add_shortcode('my_sitemap2', 'my_showSitemap2');
function my_showSitemap2() {
  ob_start();?>

  <h2>固定ページ</h2>
  <ul><?php wp_list_pages('title_li='); ?></ul>
  <h2>記事一覧(ABC順)</h2>
  <ul><?php wp_get_archives( 'type=alpha' ); ?></ul>

  <?php return ob_get_clean();
}

固定ページからこれのショートコードを呼び出して
f:id:tagayshin:20190518180818p:plain
こんな感じで表示できた↓
f:id:tagayshin:20190518180946p:plain
https://papangit.com/wp/sitemap/

helloショートコードの次に作ったやつなので、何かおかしなことやってるかもしれないが、動いてはいる。

twentynineteenの子テーマを作成

ワードプレスではじめて子テーマというのを作ってみた。使った親テーマはデフォルトテーマのtwentynineteen。以下を参考にした(簡潔にまとまっててよかった)。
【WordPress】テーマTwenty Nineteen の子テーマを作る方法 – TN2019
1. テーマのディレクトリ(themes)の下に適当な名前のディレクトリを作る
2. 作成したディレクトリ以下にfunctions.phpとstyle.cssという名前でファイルを作る
f:id:tagayshin:20190517191400p:plain

3. それぞれ以下のように編集して保存する
functions.php

<?php
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
}

何を書いているのかよくわからないが、まぁとりあえずコピペ。<?の閉じタグみたいなのもいらないっぽい。

style.css

/*
Template:twentynineteen
Theme Name:test theme (twentynineteen child)
*/

Templateに親テーマのディレクトリの名前を記述する。

これが最小構成のようだ。編集したファイルの保存の改行コードはLF(Linuxサーバの場合)、日本語を使う場合は文字コードUTF-8がよいような気がする。
管理画面のテーマの外観/テーマで、さっき作ったテーマがあるので、有効化すると作った子テーマが使える。
f:id:tagayshin:20190517192151p:plain

「ん」の発音

日本人が「ん」を発音するとき、後ろに来る音により3通りの発音になる。

  • ぽ → /m/   (p,b,mの前、唇が閉じる/m/の音)
  • ちん→/n/  (t, d, n, r, dzの前。唇は閉じない/n/の音)
  • こ→/ŋ/  (k,gの前、唇は閉じず鼻から息が抜ける/ŋ/の音)

参考

東外大言語モジュール|日本語|発音|実践編

同じ「ん」でも、実は違うんです。

#1509. 日本語における語中軟口蓋鼻音の脱音素化

 

この使い分けは日本語ネイティブは意識せず自動的に行っている。というか、違う言い方をすると、とても言いにくい。"ちんこ"の「ん」を/m/で発音すると"ちむこ"になっちゃうし。

 

英語ネイティブが theを母音の前はジ、子音の前はザって発音するのも自動的らしいが、the appleがザアッポーよりジアッポーの方が言いやすいのかイマイチピンとは来ない

簡単シンプル! "the" の発音が「ザ」か「ジ」かの判別方法と使い分け方 | DMM英会話ブログ

データベース選択不可

テスト用に2つ目のワードプレスをインストールをしていたんだが、初期化画面でデータベース接続のエラーになる。

f:id:tagayshin:20190517172322p:plain

データベース選択不可
データベースサーバーに接続できました (ユーザー名とパスワードには問題ありません) が、データベース wordpress2 を選択できませんでした。
* 本当に存在していますか ?
* ユーザー root にはデータベース wordpress2 を使用できる権限がありますか ?
* 一部のシステムでは username_wordpress2 のようにデータベースの接頭辞にユーザー名がつけられています。これが問題になっている可能性はありませんか ?
データベースのセットアップ方法が分からない場合はホスティングサービスに連絡してください。それでもダメならWordPress サポートフォーラムでヘルプを見つけられるかもしれません。

しばらく悩んだのだが、自分が作ったデータベース名がwordpressdb2で、入力したのがwordpress2で、名前が違うだけという凡エラーだった・・・書いてるままのエラーだったね・・・

怪我の功名で、firewalldのmariadbのポート開きっぱなしだというのを発見できたのでよしとしよう・・・(テスト時だけオープンにしとくつもりが--permanentつけてremoveしてなかったので再起動時に開いたままになってた)

アクセスの多いURL(ワードプレス)

昨日、AWStatsを入れてみたのだが、アクセスの多いURLトップ10は以下のようになっていた。
f:id:tagayshin:20190516142219p:plain

1. /wp/wp-admin/admin-ajax.php
2. /wp/wp-login.php
3. /wp/xmlrpc.php
4. /wp/wp-content/themes/cocoon-master/lib/analytics/access.php
5. /wp/wp-content/themes/cocoon-master/webfonts/icomoon/fonts/icomoon.ttf
...

さすがに今月2000回もログインしてないので、どうも知らない人が俺のワードプレスの管理者画面に勝手に入ろうとしているようだ(のかな?)
ログイン画面のURLを変更すると効果てきめんのようだが、デフォルトでその機能はない(プラグインを追加するか自分でコードを記述する必要がある)らしい。とりあえず、管理者ログインのパスワードを無茶長くしときました。
参考 WordPress管理画面のログインパスワードの変更 | WordPressの使い方

とりあえずやったことはそれだけ。
1のadmin-ajax.phpは必要なファイルでアクセス制限をかけてはいけないものらしい。3のxmlrpc.phpは制限かけてもいいが、一応使うらしいので保留。
参考
https://nelog.jp/attacked-php-files
ブルートフォース攻撃 - WordPress Codex 日本語版
WordPressにおけるxmlrpcへの脆弱性対応のお願い | スマートコネクト マネージドサーバ

"universe.send.microad.jp" Webサイト証明書が取り消されました

 数日前から、はてなブログにアクセスするたびに、ESETの警告がバンバン出る。

Webサイト証明書が取り消されました

このサーバ(universe.send.microad.jp)によって使用される証明書は信頼できない証明書に設定され、接続は安全でありません。

 

f:id:tagayshin:20190516125427p:plain

マイクロアドのネット広告のようだ。

よくある証明書の期限切れというわけではないみたいだが、何でやろ?

f:id:tagayshin:20190516132150p:plain

すぐ直るだろと思っていたら、何日も警告が出続けてうざい。

社会的地位もあるサイバーエージェントマイクロアドさんが悪さするとは思えないので、信頼することにして、検査せずにアクセス許可する設定にした。

 ESETの設定→詳細設定→Webとメール→SSL/TLSの既存の証明書のリストの編集で...

と思ったが設定しても警告出続ける。ESETの設定わからん、あまりいじりたくない。もう数日放置する。誰かが解決してくれるだろう期待。

 

 参考

ESET、WEBサイト証明書が取り消されました。閲覧ありがとうござ... - Yahoo!知恵袋

ESETの"Website certificate is revoked"エラーは「ウェブサイト証明書の取り消し」!

ESETさんが接続をブロックする

 

AWStatsを使ってみた

ApacheなどのWebサーバのログ解析ツールではこんなのが有名らしい。

レンタルサーバーのログ解析ツール(アクセス解析ツール)比較

Analog
Webalizer
AWStats(Advanced Web Statistics)
Access Analyzer
Piwik


何となくAWStatsというのを使ってみた。
環境 CentOS7.6 + Apache2.4.6

公式サイト
AWStats - Open Source Log File Analyzer for advanced statistics (GNU GPL)

インストール、初期設定

主にここを参考にインストール、設定をすすめた
Setup AWStats (Apache Log Analyzer) on CentOS, RHEL & Fedora

[root@xxx ~]# yum install awstats

設定ファイル /etc/awstats/xxx.conf

/etc/awstats 以下にawstatsの設定ファイルがあるので、コピーして自分のファイルを1つ作る。
ドメイン名がhogehoge.comならawstats.hogehoge.com.conf
awstats.model.conf以外のconfファイルは、awstats_updateall.pl などで呼び出されてしまうので使わないconfファイルは消すか、名前を.conf以外にしておく。

編集した内容

LogFile="/var/log/httpd/access_log"
SiteDomain="hogehoge.com"
DNSLookup=1
LoadPlugin="tooltips"

ログ統計の作成 awstats.pl

awstats.pl に上で編集したconfファイルを指定して実行すると、awstatsの統計ファイルが作成される。一回目はログ全部読むのでけっこう時間がかかる。2回目以降は早い。

[root@xxx ~]# /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -config=hogehoge.com -update

統計ファイルは以下のディレクトリに作成される
/var/lib/awstats

Apache側のアクセス制限等設定

以下のようなURLでブラウザからawstatにアクセスできる
https://hogehoge.com/awstats/awstats.pl?config=hogehoge.com

デフォルトのままだとブラウザからのアクセスは拒否される。こんなメッセージが表示される↓

Forbidden

You don't have permission to access /awstats/awstats.pl on this server.

awstat.confを編集して、とりあえず誰でもアクセスできるようにする。
以下のファイルを編集。以下を追加。Allow from allはApache2.2系の書き方でダメみたい。AWStatsの記事をググってると古い記事が多く、アクセスできなくてしばらくはまった。
/etc/httpd/conf.d/awstat.conf

<Directory "/usr/share/awstats/wwwroot">
    Options None
    AllowOverride None
    Require all granted
   ...

Access Control - Apache HTTP Server Version 2.4


apacheを再起動すると、

[root@xxx ~]# systemctl restart httpd

アクセスできたぜ!
f:id:tagayshin:20190515203533p:plain

全公開だと何なので後でDigest認証かけといた。

定期実行

以下が作られており、デフォルト1時間おきに、統計ファイルが更新されるようになっている
/etc/cron.hourly/awstat

古いログも読ませる

何か順番?とかもあるようなので、一度以下の場所にある統計データを削除
/var/lib/awstats/xxx.txt

logresolvemerge.pl というツールを使って、apacheaccess_logからはじまる名前のファイルを結合。その後、結合したファイルを指定してawstats.plを実行。処理にけっこう時間がかかる。

/usr/share/awstats/tools/logresolvemerge.pl /var/log/httpd/access_log* > /root/merged_access_log
/usr/share/awstats/wwwroot/cgi-bin/awstats.pl -update -config="hogehoge.com" -LogFile="/root/merged_access_log"

AWStats Documentation - Other tools

awstats.pl の引数の-LogFileでlogresolvemerge.plを渡す方法↓もあるみたいだけど、これは何かうまく動かなかったので、上のように一度logresolvemerge.plでログを結合してから、次にawstats.pl を実行した。
/usr/share/awstats/wwwroot/cgi-bin/awstats.pl -update -config="hogehoge.com" -LogFile="/usr/share/awstats/tools/logresolvemerge.pl /var/log/httpd/access_log* |"

ログローテーション

apacheアクセスログがローテーションすると、ログの取りこぼしがおこる。ローテーションをトリガーに、awstats.plを起動するようにしておく
以下のファイルに、prerotateでawstats.plを呼び出すように追記。(ちゃんと動いてるのか自信がない)
/etc/logrotate.d/http

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    prerotate
        /usr/share/awstats/wwwroot/cgi-bin/awstats.pl -config=hogehoge.com -update
    endscript
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

Apacheのアクセス制限で少しはまって、古いログを読み込ませるのでも少しはまって、何だかんだ半日ぐらいかかった。
何か読み返してみても分かりにくいが、まぁいいか、忘備録ということで。




[PR]アンヘレスで愛人