Contents
WordPressとは
用語
固定ページ
常に表示させたいページなどに使用する。
投稿と違い、独立したページとして扱われるため、カテゴリやタグの設定はできず、最近の更新情報など時系列を利用したページ一覧に表示させることもできない。
投稿
ブログの通常の投稿用のページとして使用する。
カテゴリやタグの設定ができる。
最近の投稿一覧に最新のものから表示されるが、古いものは表示されない。
権限グループ
WordPressではユーザを作成し、認証させたうえで使用させることができる。その際に、ユーザに権限を設定する。権限は権限グループとして定義されたデフォルトの権限グループから割り当てることで制御できる。
権限グループをデフォルト状態からさらに権限追加して使用したい場合は”User Role Editor”などのプラグインが必要。
購読者
投稿はできない権限。コメントの投稿は可能であり、コメントの投稿を認証されたユーザのみに許可したい場合に使用する権限。
寄稿者
購読者権限に加えて、新規の投稿の作成や、記事一覧・コメント一覧を見ることができる。
ただし、投稿の作成時にメディアのアップロードは不可で、画像を掲載することができない。
また、作成した投稿はすぐに掲載されずに管理者・編集者の掲載許可が必要である。
投稿者
寄稿者権限に加えて、自身が作成した投稿を公開することができる。
加えて、投稿の作成時にメディアのアップロードができる。
編集者
投稿者権限に加えて、他のユーザが作成した投稿を編集・削除できる。
また、寄稿者が作成した投稿を確認して公開することができる。コメントの承認、削除も可能。
更に、投稿に設定する、新規のカテゴリやタグを作成することができる。
管理者
WordPress自体の管理が可能で、投稿の管理のほか、テーマの設定やユーザの作成などの管理作業を行える。
メタボックス
投稿画面などで表示される各種入力フィールドやボタンなどが配置される枠のことである。メタボックスは折りたたみや移動が可能で、カスタマイズにより非表示にしたり、プラグインによりメタボックスを追加したりできる。
デフォルトのメタボックスには「カテゴリー」や「タグ」、「公開」、「カスタムフィールド」などがある。
サーバー構築
構築環境
- OS
CentOS release 7.5 (64bit)
- Apache Version
2.4.37
- PHP Version
7.2.9
- MariaDB Version
10.3.12
- WordPress Version
5.0.3
OS設定
ネットワーク
固定IPアドレス割り当て
次のファイルを編集する
# ifcfg-loはループバックインタフェースであるため、触らない vi /etc/sysconfig/network-scripts/ifcfg-<インタフェース名>
以下では例として192.168.0.51/24を割り当てた
BOOTPROTO=static ONBOOT=yes IPADDR=192.168.0.51 NETMASK=255.255.255.0 NETWORK=192.168.0.0 GATEWAY=192.168.0.1
ネットワークを再起動する
systemctl restart network
ip addressコマンドにより、インタフェースが有効になっていることを確認する
これによりホストマシンなどからSSHでログイン可能となる
firewalld
HTTPを開ける
- 現在ルールが定義されていることを確認
firewall-cmd --permanent --info-service=http
- 現在ルールが適用されていないことを確認する
firewall-cmd --list-services --zone=public --permanent | sed -e "s/ /\n/g" | grep http
- ルールを適用する
firewall-cmd --add-service=http --zone=public --permanent
- ルールが適用されていることを確認する
firewall-cmd --list-services --zone=public --permanent | sed -e "s/ /\n/g" | grep http
- 設定を再読み込みして反映させる
firewall-cmd --reload
HTTPSも開ける場合
- 現在ルールが定義されていることを確認
firewall-cmd --permanent --info-service=https
- 現在ルールが適用されていないことを確認する
firewall-cmd --list-services --zone=public --permanent | sed -e "s/ /\n/g" | grep https
- ルールを適用する
firewall-cmd --add-service=https --zone=public --permanent
- ルールが適用されていることを確認する
firewall-cmd --list-services --zone=public --permanent | sed -e "s/ /\n/g" | grep https
- 設定を再読み込みして反映させる
firewall-cmd --reload
ホスト名
ホスト名としてwordpressを設定する
hostname wordpress.corp # 再起動しても有効にする echo wordpress.corp > /etc/hostname
再ログインすることで有効になる。
MariaDBの構築
参考:mariadb
WordPress用の設定
- ログインする
mysql
- データベースを作成する
create database wordpress default charset=utf8;
- ユーザを作成する
grant all on wordpress.* to wordpress@localhost identified by "wordpress";
Apacheの構築
参考:apache
PHPの構築
参考:php
ビルド時のオプション
./configure --prefix=/usr/local/`pwd | sed "s/.*\///"` \ --with-apxs2=$APACHE_HOME/bin/apxs \ --enable-mysqlnd \ | tee configure.log.`date +"%Y%m%d_%H%M%S"`
設定ファイルの変更
sed -e "s/;extension=mysqli/extension=mysqli/" \ -e "s/;extension=pdo_mysql/extension=pdo_mysql/" \ -i $PHP_HOME/lib/php.ini
設定変更
zlibが有効になっている場合、編集時にエラーメッセージが表示される。
これを避けるために、下記設定がOnになっている場合はOffに変える。
zlib.output_compression = Off
エラーメッセージは下記。
- Apacheのエラーログ
PHP Notice: ob_end_flush(): failed to send buffer of zlib output compression (1) in /usr/local/wordpress-5.0.3-ja/wp-includes/functions.php on line 3813
- 編集画面
Notice: ob_end_flush(): failed to send buffer of zlib output compression (1) in /usr/local/wordpress-5.0.3-ja/wp-includes/functions.php on line 3813
WordPressインストール
WordPressの設置
- ダウンロードサイト:http://ja.wordpress.org/からアーカイブのURLを取得する
- ダウンロードする
curl -s -O http://ja.wordpress.org/wordpress-5.0.3-ja.zip
- アーカイブファイルを展開する
unzip wordpress-*-ja.zip
- バージョン名を付加する場合は以下を実行する。
WordPressはWeb管理画面からオンラインアップデートが可能であるので、常に最新版を維持しやすい。
その為、バージョン名付加は基本的に不要である。
mv wordpress `ls wordpress-*-ja.zip | sed "s/.zip//"`
- アーカイブファイルを削除する
rm -f wordpress-*-ja.zip
- 公開ディレクトリへ配置する
- 専用のディレクトリに配置する場合(以降はこちらの場合で進める)
mv wordpress* /usr/local/
- Apacheディレクトリへ移動する場合
mv wordpress* $APACHE_HOME/htdocs/
- 専用のディレクトリに配置する場合(以降はこちらの場合で進める)
- リンクを作成する
- リンク作成、環境変数設定などを行う
- ディレクトリにバージョン名を付加した場合はインストールディレクトリへのシンボリックリンクを作成する。
これによって、複数のバージョンを同居させ、リンクを切り替えることで、バージョン変更が可能となる。
各バージョンの実行ファイルはデフォルトでは各バージョンの設定ファイルを読み込むこととなる。
rm -f /usr/local/wordpress ln -s /usr/local/wordpress* /usr/local/wordpress
- 簡単にアクセスできるように環境変数を設定する
export WORDPRESS_HOME=/usr/local/wordpress
- 環境変数を再起動後も有効にする
echo "" >> /etc/bashrc echo "# WORDPRESS ENVIRONMENT VARIABLE" >> /etc/bashrc echo "export WORDPRESS_HOME=$WORDPRESS_HOME" >> /etc/bashrc
- ディレクトリにバージョン名を付加した場合はインストールディレクトリへのシンボリックリンクを作成する。
- 所有者を変更する
chown -R apache:apache /usr/local/wordpress*
Apacheの設定
WordPressの公開設定を行う
※PHPのLoadModule設定はPHPのインストール時に自動で設定される。
- Apacheの設定ファイルに追記する
cat >> $APACHE_HOME/conf/httpd.conf << EOT # PHP Configuration <IfModule php7_module> <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> AddType text/html .php </IfModule> # WordPress Configuration Alias /wordpress/ "/usr/local/wordpress/" <Directory "/usr/local/wordpress/"> Options Indexes FollowSymLinks AllowOverride None Require all granted DirectoryIndex index.php </Directory> EOT
- 再起動する
systemctl restart apache
WordPressの設定
初期設定
設定ファイルが存在しないので、作成する
※サンプル:ファイルをコピーして編集しても良い
$WORDPRESS_HOME/wp-config-sample.php
以下を実行する
GET_RANDOM="LC_CTYPE=C tr -dc A-Za-z0-9 < /dev/urandom | fold -w ${1:-32} | head -n 1" cat > $WORDPRESS_HOME/wp-config.php << EOT <?php define('DB_NAME', 'wordpress'); define('DB_USER', 'wordpress'); define('DB_PASSWORD', 'wordpress'); define('DB_HOST', 'localhost'); define('DB_CHARSET', 'utf8'); define('DB_COLLATE', ''); define('AUTH_KEY', '`eval $GET_RANDOM`'); define('SECURE_AUTH_KEY', '`eval $GET_RANDOM`'); define('LOGGED_IN_KEY', '`eval $GET_RANDOM`'); define('NONCE_KEY', '`eval $GET_RANDOM`'); define('AUTH_SALT', '`eval $GET_RANDOM`'); define('SECURE_AUTH_SALT', '`eval $GET_RANDOM`'); define('LOGGED_IN_SALT', '`eval $GET_RANDOM`'); define('NONCE_SALT', '`eval $GET_RANDOM`'); \$table_prefix = 'wp_'; define('WPLANG', 'ja'); define('WP_DEBUG', false); if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); require_once(ABSPATH . 'wp-settings.php'); EOT chown apache:apache $WORDPRESS_HOME/wp-config.php
セットアップ
Webブラウザで下記にアクセスしてセットアップを進める。
http://<ホスト名>/wordpress/wp-admin/setup-config.php
アクセス後、次の警告がでるが、無視して続行する。
wp-config.php ファイルがすでに存在しています。このファイル内の設定項目をリセットする必要がある場合は、まずこのファイルを削除してください。準備がよければインストールを実行してください。
サイト名や管理者アカウント情報を入力してセットアップは完了である。
基本設定
マルチサイト設定
1つのWordPressで複数のサイトを管理する場合、マルチサイト化する必要がある。
マルチサイト化すると一部の設定が初期化されたり、ページのURLが変わる可能性がるので、なるべく初期の段階で行っておいた方が良い。
マルチサイト化すると、複数のドメイン、もしくは複数のサブディレクトリで別のサイトとすることができる。
なお、現サイトがサブディレクトリである場合は、複数のサブディレクトリにしかできない。
- 設定ファイルを変更し、マルチサイト化を有効にする。
vi $WORDPRESS_HOME/wp-config.php
下記の行の上にif ( !defined('ABSPATH') )
以下を追加する。define('WP_ALLOW_MULTISITE', true);
- 管理ページ > ツール > サイトネットワークの設置
- いずれかのプラグインが有効である場合、無効化するよう警告が表示されるので一時的にすべて無効化する
- 「WordPress サイトネットワークの作成」画面が表示される
- 複数のドメインか複数のサブディレクトリかを選択する。現在のサイトがサブディレクトリである場合は、選択肢は表示されず、サブディレクトリ方式となる。
ここで選択した方式は後から変更できない。変更する場合は再インストールが必要になるので、変更する可能性があるならデータベースとWordPressのインストールディレクトリのバックアップを取得した方が良い。 - サーバーアドレス、サイトネットワーク名、管理者のメールアドレスなどが入力可能であるが、入力しなくても良い。
- インストール
- 複数のドメインか複数のサブディレクトリかを選択する。現在のサイトがサブディレクトリである場合は、選択肢は表示されず、サブディレクトリ方式となる。
- 「サイトネットワークを有効化中」画面が表示される
- マルチサイトを有効にする。
vi $WORDPRESS_HOME/wp-config.php
下記の行の上にif ( !defined('ABSPATH') )
ページで指示されているwp-config.phpに追記する内容を記載知る。
“if ( !defined(‘ABSPATH’) )”より後の部分に記載すると次のような警告が画面上に表示されるので注意。Constant MULTISITE already defined in XXX
- Apacheのリライトルールを追記する
・httpd.confに設定を行う場合vi $APACHE_HOME/conf/httpd.conf
・.htaccessに設定を行う場合vi <WordPressのインストールディレクトリ>/.htaccess
ページで指示されている.htaccessに追記する内容を記載する。
既にリライトルールが記載されている場合は置き換える。 - Apacheを再起動する
apachectl graceful
- マルチサイトを有効にする。
- WordPressの管理ページに再ログインする
- 管理画面左上に「参加サイト」が表示されていることを確認する
- プラグインを無効化した場合は再度有効化する。
※有効化の表示は「サイトネットワークで有効化」に変わっている - パーマリンク設定をしていた場合は初期化されているので再設定する
- 参加サイト > サイトネットワーク管理 > サイト
- 作成したサイトの編集リンクをクリックする
- 設定タブを開く
- Permalink Structureを元に戻す
例:/%category%/%postname% - 変更を保存
サブディレクトリ方式の場合の追加設定
サブディレクトリで使用している状態でサブディレクトリ方式のマルチサイト化を行うと、新しく追加したサイトで管理ページにログインできなかった。
あるサイトではwp-config.phpの設定を書き換えることでログイン可能になるとあった。
変更前:define(‘PATH_CURRENT_SITE’, ‘/wiki/’);
↓
変更後:define(‘PATH_CURRENT_SITE’, ‘/’)
これによってログイン可能となったが、WordPress全体のサイト設定(参加サイト > サイトネットワーク管理 > XXX)へのアクセスができなくなった。
これは次のようにすることで解決できた。
- wp_siteテーブルを確認する
mysql wordpress -e "select * from wp_site;"
次のように表示されるはずである。
+----+------------------+--------+
| id | domain | path |
+----+------------------+--------+
| 1 | eldorado-of.info | /wiki/ |
+----+------------------+--------+ -
次に値を更新する。
mysql wordpress -e "update wp_site set path='/';"
-
結果を確認する。
mysql wordpress -e "select * from wp_site;"
次のように表示されるはずである。
+----+------------------+------+
| id | domain | path |
+----+------------------+------+
| 1 | eldorado-of.info | / |
+----+------------------+------+
新しいサイトの作成
- 管理ページ > サイト
- 新規追加
- サイトアドレスに新しいサイトのドメイン、サブディレクトリ名を入力する。
サブディレクトリの場合であっても最後に”/” (スラッシュ)は不要である。
サブディレクトリの場合、メインサイト配下のパスで一旦作成されるが、後からメインサイトと同じ階層に変更可能である。 - サイトのタイトルを入力する。既存のものと同じでも良い。
- 管理者メールアドレスを入力する。既存のものと同じでも良い。
- サイトを追加
- 作成したサイトの設定を変更する。
- 必要に応じて新しいサイトのエイリアスやリライトルールを追記する。
URL(パーマリンク)の設定
標準では投稿したページは下記のパスで公開される。
/wordpress/index.php/%year%/%monthnum%/%day%/%postname%/
※%%部分は変数
変更する場合は下記手順で行う。
- 設定
- パーマリンク設定
- 共通設定を任意のものに変更する
- 変更を保存
“/カテゴリ名/[サブカテゴリ名…/]ページ名”とする場合は下記
/%category%/%postname%
.htaccessを使用していない場合
URLにindex.phpが含まれない設定にし、.htaccessを使用していない場合は自身でRewrite設定を行う必要がある。.htaccessを使用している場合は、自動で生成される.htaccessが有効になる。
- 設定ファイルを編集する
vi $APACHE_HOME/conf/httpd.conf
- いずれかの箇所に以下を追記する
LoadModule rewrite_module modules/mod_rewrite.so
- 「<Directory “/usr/local/wordpress/”>」ディレクティブ内部に以下を追記する
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /wordpress/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /wordpress/index.php [L] </IfModule>
- 設定を反映する
systemctl reload apache
プラグイン
プラグインは下記から検索可能
https://ja.wordpress.org/plugins/
プラグインのインストール方法
Webから直接インストールする
WordPressサーバーから直接インターネットに接続できる場合、管理画面からダウンロード・インストールを行える
- 管理画面にログインする
- プラグイン > 新規追加
※マルチサイトの場合、参加サイト > サイトネットワーク管理 > プラグイン > 新規追加 - プラグインの検索フィールドにインストールしたいプラグイン名を入力して検索する
- インストールしたいプラグインが表示されたら、今すぐインストール
- プラグインを有効化
※マルチサイトの場合、サイトネットワークで有効化
ローカルからアップロードする
WordPressサーバーから直接インターネットに接続できない場合に使用する方法
- 管理画面にログインする
- プラグイン > 新規追加
※マルチサイトの場合、参加サイト > サイトネットワーク管理 > プラグイン > 新規追加 - プラグインのアップロード
- 対象のzipファイルを選択する
- 今すぐインストール
- プラグインを有効化
※マルチサイトの場合、サイトネットワークで有効化
WYSIWYGエディター
WordPressは標準でwysiwygエディターを搭載しているが、機能が少ない。
そのため、プラグインにより別のエディターに切り替える。
TinyMCE Advanced
オープンソースのWYSIWYGエディター「TinyMCE」のWordPress版の一種。
高機能だが使用しない機能は無効化することもできる。
サイト:https://ja.wordpress.org/plugins/tinymce-advanced/
デモサイト:https://www.tiny.cloud/features/
CSSの修正
エディターのボタンにはdashiconsというアイコン用のフォントが使用されているが、文字化けして表示されない問題がある。
これは他のスタイルで指定したフォントの方が優先度が高いためである。
下記の手順で別のスタイルの優先度を下げる。
(!important指定を削除し、セレクタの詳細度を下げている。)
cp $WORDPRESS_HOME/wp-content/themes/twentynineteen/style-editor-customizer.css \ $WORDPRESS_HOME/wp-content/themes/twentynineteen/style-editor-customizer.css.original sed "s/ \!important//g" -i $WORDPRESS_HOME/wp-content/themes/twentynineteen/style-editor-customizer.css sed "s/^html.*lang.*ja.*$/html[lang=\"ja\"] {/" \ -i $WORDPRESS_HOME/wp-content/themes/twentynineteen/style-editor-customizer.css
なお、恐らく下記のいずれかのファイルでボタンアイコンのスタイルを指定していると思われるが、!important指定を付加するなど変更しても解決しなかった。
$WORDPRESS_HOME/wp-includes/css/editor-rtl.min.css $WORDPRESS_HOME/wp-includes/css/editor.min.css
Ultimate TinyMCE
現在更新されておらず、最新のWordPressには対応していない。
サイト:https://ja.wordpress.org/plugins/ultimate-tinymce/
目次の自動生成(Table of Contents)
h系の要素から自動でそのページの目次を作成するプラグイン
Table of Contents Plus
https://ja.wordpress.org/plugins/table-of-contents-plus/
デフォルトでは固定ページにしか目次作成されないので、投稿にも表示されるように変更しておく
“次の投稿タイプのときに表示”の”post”にチェックを入れる
目次はページに”div#toc_container”要素が挿入されるので、
スタイルを変更する際は上記に対して行うとよい。
ただし、screen.min.cssが読み込まれる場合はこのファイルに定義されたスタイルも適用される。
テーマを自作する場合
テーマを自作する場合は目次が生成されない。
デフォルトのテーマtwentynineteenであれば下記部分の内部で目次が生成されるが、これを呼び出さないためである。
get_template_part( 'template-parts/post/content', get_post_format() );
こちらは目次生成以外の役割も担っていると思われるため、目次生成のみであれば、ページ用のphpファイルに下記を追記すればよい。
<?php echo '<ul id="my_toc">'.toc_get_index().'</ul>'; ?>
これによって装飾はされていないが、目次が生成される。ただし、h1~h6タグにタグ内文字列と同じ内容のid属性が指定されていないと動作しない。
これはh1~h6タグの改変が行われないためである。そのため、自作テーマでTable of Contents Plusを使用する場合は、既存テーマを改修して使用するかh1~h6タグの改変を自分でしなければならない。
XML Sitemapの生成
Googleの検索エンジンに登録する際など、Webサイトの構成をXMLで生成して渡すと漏れなく登録できる。
しかし、手作業でXMLを作成、更新するのは手間であるため、プラグインで生成するのが良い。
Google XML Sitemaps
https://ja.wordpress.org/plugins/google-sitemap-generator/
Sitemapを生成後、Googleに自動で登録が可能。
設定によって、Sitemapに登録しないページやカテゴリなどを選択可能。
ページのアクセスコントロール
User Access Manager
https://ja.wordpress.org/plugins/user-access-manager/
投稿や固定ページなどに対し、特定のログインユーザーが行える操作を規定できる。
ログインしていないユーザは閲覧負荷ということも可能であるが、デフォルトで閲覧不可とはできなず、また特定のカテゴリ配下のページを閲覧不可ということもできない。
設定方法
インストール後、ダッシュボードの左メニューバーに「UAM」という項目が現れるので、そこから設定可能
ウィジェット
WordPressには各閲覧画面に共通で表示されるウィジェットを配置することができる。
例えば以下がある。
- 最近の投稿
- 最近のコメント
- 検索
- カスタムHTML
なお、ウィジェットの編集は各ページのカスタマイズリンクからも行えるが、ここで設定しても当該ページのみでなく、サイト全体で反映される点に注意。
ウィジェットの削除
- 管理画面にログインする
- 外観 > ウィジェット
- 右部のフッターから不要なウィジェットを開き、削除をクリックする
ウィジェットの追加
ウィジェットの表示個所は自動で設定されるので、カスタムHTMLを設定してもPCの場合はページの半分にしか表示されない点に注意。
- 管理画面にログインする
- 外観 > ウィジェット
- 左部の利用できるウィジェットから任意のウィジェットを選択し、ウィジェットを追加ボタンをクリックする
テーマ
テーマの変更
テーマの入手
https://ja.wordpress.org/themes/
テーマの作成
テーマは自分で作成することができる。
ファイル構成
- header.php
HTMLページのヘッダを記述する。
各ページから呼び出すことで共通の設定を行える。(get_header()関数)
各ページにヘッダを書いても良いが、投稿ページ、トップページなど複数種類存在するので、本ファイルに記述しておいた方が管理が簡単である。
HTMLページ中にPHPコードを記述することが可能である。
- footer.php
HTMLページのフッタを記述する。
各ページから呼び出すことで共通の設定を行える。(get_footer()関数)
各ページにフッタを書いても良いが、投稿ページ、トップページなど複数種類存在するので、本ファイルに記述しておいた方が管理が簡単である。
ただし、フッタが不要であれば本ファイルの作成の必要はない。
HTMLページ中にPHPコードを記述することが可能である。
- sidebar.php
HTMLページのサイドバーを記述する。
各ページから呼び出すことで共通の設定を行える。(get_sidebar()関数)
サイドバーが不要であれば作成の必要はない。
HTMLページ中にPHPコードを記述することが可能である。
- index.php
デフォルトとなるページの本文を記述する。
内部でheader.phpとfooter.php、必要であればsidebar.phpも呼び出すことで、ページが完成する。
このファイルはトップページやカテゴリページなどで共通の本文として使用される。
ただし、各ページは個別にテンプレートを作成することができるので、そのテンプレートファイルが存在する場合は、このファイルは使用されない。
各ページの対応は以下である。
- home.php
トップページ - single.php
投稿ページ - page.php
固定ページ - category.php
カテゴリページ - tag.php
タグページ - archive.php
アーカイブページ - search.php
検索結果ページ - author.php
投稿者の投稿一覧ページ - 404.php
呼び出されたURLに対応するコンテンツがない場合のページ
- home.php
- style.css
スタイルを記述する。
テーマのメタデータをコメントで記述する必要があるので、必須のファイルである。
- functions.php
テーマで使用する独自関数を定義する。
自動的に呼び出されるので、グローバル部分に独自コードを記述して初期化しておくことができる。
ライブラリ関数
WordPressにはテーマ作成時に使用できる関数が用意されている。
サンプル
style.css
- 最低限の構成
テーマ名を”MyTheme”としているが値は任意である
/* Theme Name: MyTheme */
single.php
- 最低限の構成
非公開ページや存在しないページは404.phpページが表示される。
<?php get_header(); ?> <?php $post=get_post(); $title = $post->post_title; $content = $post->post_content; ?> <h2><?php echo $title; ?></h2> <div><?php echo $content; ?></div> <?php get_footer();
- 最低限の構成
dynamic_sidebar関数の引数はfunctions.php内で呼び出しているregister_sidebar関数の引数idの値を記載する。
これによって管理画面から設定したウィジェットを表示することができる。
<footer> <?php dynamic_sidebar( 'sidebar-1' ); ?> </footer> <?php wp_footer(); ?> </body> </html>
search.php
検索結果を表示するためのHTMLを記述する。
searchform.php
検索フォームのHTMLを記述する。
get_search_form関数が呼ばれた場合にコードが挿入される。
ただし、searchform.phpを作成していない場合でもデフォルトの検索フォームが表示される。
検索の際は /<WordPressのトップページ>/?s=<検索ワード> へアクセスされなければならない。検索ワードが複数ある際は”+”で連結する。
comments.php
コメントフォームのHTMLを記述する。
comment_form関数が呼ばれた場合にコードが挿入される。
ただし、comments.phpを作成していない場合でもデフォルトの検索フォームが表示される。
個人で使用している場合、投稿者はadminユーザのみになる。
この場合には、投稿者ページを提供する意義はなく、特定カテゴリの非表示化をした場合などに不便である。
その為、以下のようにトップページにリダイレクトしておくとよい。
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
<body>
<script>
location.href="/wiki/";
</script>
</body>
</html>
functions.php
未分類カテゴリーの非表示
未分類カテゴリーは個人メモ用としてApacheで未分類カテゴリー配下のURLは認証を求めるようにしたとする。
しかしこの場合、検索(?s=<検索ワード>)のURLで検索すると投稿が表示されてしまう。
下書き状態であれば表示されないが、誤って公開してしまっても表示されないように検索結果から未分類カテゴリーを除くようにする。
function SearchFilter($query)
{
if (!is_user_logged_in() && $query->is_main_query() && $query->is_search()) {
$query->set('category__not_in', array(1));
}
return $query;
}
add_action('pre_get_posts','SearchFilter');
ショートコードの作成
ページ中に現れる特定のショートコードを任意の文字列に変換することができる。
ショートコードが現れた際に呼び出されるコールバック関数をfunctions.php定義しておく。
- 参考
- サンプル
ショートコード”[test_code]”を”TEST”に置換する。
<?php function short_code_test($attributes) { return "TEST"; } add_shortcode('test_code', 'short_code_test');
コールバック関数の定義
コールバック関数は任意の関数名で定義する。
戻り値は文字列。
引数の有無は任意で、属性を引数としてとることができる。
属性はショートコード中に次のように記述する。
[test_code a="1" b="2"]
これによって、連想配列として引数に属性が渡される。
コールバック関数の登録
コールバック関数は登録しないと呼び出されない。
登録はadd_shortcode関数で行う。
- 書式
add_shortcode("<ショートコード名>", "<コールバック関数名>");
Tips
カテゴリー名を使用して階層構造にする
投稿を次のようなURLに設定する
/wordpress/category1/category2/page1 /wordpress/category1/category2/page2 /wordpress/category1/category2
パーマリンク設定
パーマリンク設定をカスタム構造にし、次の値を設定する
/%category%/%postname%
※%category%変数はカテゴリーが階層構造になっている場合、サブカテゴリーも含む
投稿作成
投稿の際、各ページで「カテゴリー」設定で任意のカテゴリーを設定する
その際、複数のカテゴリーに含めることが可能で、その場合は各カテゴリー一覧に当該投稿が表示される。
また、カテゴリー階層の全階層に含めることも含めないこともできるが、末端階層のカテゴリーにしか属していない投稿でも上位階層のカテゴリー一覧にも当該投稿が表示されるので、結果的に同じである。
カテゴリー名と同じ名前の投稿を作成することは可能である。
特殊なURL
通常は存在しないURLを開くと正常に表示されないか、テーマに存在すれば404ページが表示される。
しかし、特殊なURL(クエリストリング)を指定した場合は特別なページが表示される。
- 検索
<WordPress URL>/?s=<検索ワード>
- カテゴリー
<WordPress URL>/?cat=<カテゴリーID>
- ユーザの投稿一覧
<WordPress URL>/?author=<ユーザID>