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 get archivesで引数show_post_count=trueを渡すと件数が表示される。
<?php wp_get_archives('type=monthly&show_post_count=true'); ?>
カッコが消える処理の対処
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(); }
固定ページからこれのショートコードを呼び出して
こんな感じで表示できた↓
https://papangit.com/wp/sitemap/
helloショートコードの次に作ったやつなので、何かおかしなことやってるかもしれないが、動いてはいる。
twentynineteenの子テーマを作成
ワードプレスではじめて子テーマというのを作ってみた。使った親テーマはデフォルトテーマのtwentynineteen。以下を参考にした(簡潔にまとまっててよかった)。
【WordPress】テーマTwenty Nineteen の子テーマを作る方法 – TN2019
1. テーマのディレクトリ(themes)の下に適当な名前のディレクトリを作る
2. 作成したディレクトリ以下にfunctions.phpとstyle.cssという名前でファイルを作る
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がよいような気がする。
管理画面のテーマの外観/テーマで、さっき作ったテーマがあるので、有効化すると作った子テーマが使える。
「ん」の発音
日本人が「ん」を発音するとき、後ろに来る音により3通りの発音になる。
- ちんぽ → /m/ (p,b,mの前、唇が閉じる/m/の音)
- ちんちん→/n/ (t, d, n, r, dzの前。唇は閉じない/n/の音)
- ちんこ→/ŋ/ (k,gの前、唇は閉じず鼻から息が抜ける/ŋ/の音)
参考
この使い分けは日本語ネイティブは意識せず自動的に行っている。というか、違う言い方をすると、とても言いにくい。"ちんこ"の「ん」を/m/で発音すると"ちむこ"になっちゃうし。
英語ネイティブが theを母音の前はジ、子音の前はザって発音するのも自動的らしいが、the appleがザアッポーよりジアッポーの方が言いやすいのかイマイチピンとは来ない
データベース選択不可
テスト用に2つ目のワードプレスをインストールをしていたんだが、初期化画面でデータベース接続のエラーになる。
データベース選択不可データベースサーバーに接続できました (ユーザー名とパスワードには問題ありません) が、データベース wordpress2 を選択できませんでした。* 本当に存在していますか ?* ユーザー root にはデータベース wordpress2 を使用できる権限がありますか ?* 一部のシステムでは username_wordpress2 のようにデータベースの接頭辞にユーザー名がつけられています。これが問題になっている可能性はありませんか ?
しばらく悩んだのだが、自分が作ったデータベース名がwordpressdb2で、入力したのがwordpress2で、名前が違うだけという凡エラーだった・・・書いてるままのエラーだったね・・・
怪我の功名で、firewalldのmariadbのポート開きっぱなしだというのを発見できたのでよしとしよう・・・(テスト時だけオープンにしとくつもりが--permanentつけてremoveしてなかったので再起動時に開いたままになってた)
アクセスの多いURL(ワードプレス)
昨日、AWStatsを入れてみたのだが、アクセスの多いURLトップ10は以下のようになっていた。
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)によって使用される証明書は信頼できない証明書に設定され、接続は安全でありません。
マイクロアドのネット広告のようだ。
よくある証明書の期限切れというわけではないみたいだが、何でやろ?
すぐ直るだろと思っていたら、何日も警告が出続けてうざい。
社会的地位もあるサイバーエージェントやマイクロアドさんが悪さするとは思えないので、信頼することにして、検査せずにアクセス許可する設定にした。
ESETの設定→詳細設定→Webとメール→SSL/TLSの既存の証明書のリストの編集で...
と思ったが設定しても警告出続ける。ESETの設定わからん、あまりいじりたくない。もう数日放置する。誰かが解決してくれるだろう期待。
参考
ESET、WEBサイト証明書が取り消されました。閲覧ありがとうござ... - Yahoo!知恵袋
ESETの"Website certificate is revoked"エラーは「ウェブサイト証明書の取り消し」!
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
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
アクセスできたぜ!
全公開だと何なので後でDigest認証かけといた。
定期実行
以下が作られており、デフォルト1時間おきに、統計ファイルが更新されるようになっている
/etc/cron.hourly/awstat
古いログも読ませる
何か順番?とかもあるようなので、一度以下の場所にある統計データを削除
/var/lib/awstats/xxx.txt
logresolvemerge.pl というツールを使って、apacheのaccess_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]アンヘレスで愛人