WordPressの関連URL取得方法

index.phpとstyle.cssの2つはテーマフォルダ直下にないとエラーになる

本来「外観>テーマの編集」のエディタからテンプレートファイルやスタイルシートを直接編集すると、バックアップが作成されず危険なのでやらないのが常識ですが、僕は小さい修正は直接やっちゃいますが、ときどきコードミスでWEBサイトが真っ白になってあせります。

そもそもテーマには最低でもstyle.cssとindex.phpの2つがテーマフォルダ直下に存在しないと、以下のエラーでテーマの選択すらできません。

  • 壊れているテーマ
    以下のテーマはインストールされていますが不完全です。テーマにはスタイルシートとテンプレートが一つずつ必要です。

この場合、編集可能なテンプレートファイルとスタイルシートはテーマフォルダ直下のファイルのみなのですが、スタイルシートはテーマフォルダ直下ではなく、cssという子フォルダに配置したいので、テーマフォルダ直下にはコメント部分のみ記載したダミーstyle.cssを配置します。

@charset "UTF-8";
/*---------------------------------------------------------
Theme Name: テンプレート名
Theme URI: http://テンプレートのURI
Description: テンプレートの詳細
Author: テンプレート作者名
---------------------------------------------------------*/
*/

cssフォルダ内の本物cssへのリンクはheaderテンプレートから張りますが、もちろん「テーマ編集」のエディタでは編集できません。

 <link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/style.css" type="text/css" />

ここでテンプレートフォルダのURLを取得するテンプレートタグが登場します。

  • get_template_directory_uri();

ブラウザのソースで確認すると

<link rel="stylesheet" href="http://localhost/wordpress/wp-content/themes/テーマフォルダ名/css/style.css" type="text/css" />

という感じに絶対パスを取得しています。

WordPressのアドレスとサイトのアドレスとテンプレートフォルダのアドレス

「設定>一般」にある「WordPressのアドレス」は WordPressのインストール先のURLで、「サイトのアドレス」はそのWordPressにアクセス先のURLになり、一般的には「WordPressのアドレス」を変更するケースはなく、「サイトのアドレス」にドメインネームを設定し、プロバイダのコントロールパネル上にてアップロードフォルダとマッピングすることになります。

当サイトは2つのマルチサイトをサブディレクトリで分けており、IT系のネタはインストール先もアクセス先もルートhttps://bahtera.jp/、世間話系のネタはインストール先もアクセス先もhttps://bahtera.jp/blogになっており、仮に世間話系の「サイトのアドレス」をIT系のものと同じhttps://bahtera.jp/に修正してしまうと、IT系の「サイトのアドレス」とバッティングしてしまうのアクセスできなくなります。

サイトのURLとテンプレートディレクトリのURL

//HTML
<a href="<?php echo home_url(); ?>"><img src="<?php echo get_template_uri(); ?>/img/logo.png"></a>
//ソース表示
<a href="https://bahtera.jp"><img src="https://bahtera.jp/wp-content/themes/yamazou/img/logo.png" /></a>

テンプレートディレクトリを取得するget_template_directory_uri()は「/wp-content/themes/テーマ」を追加してくれます。

先頭のバックスラッシュはありますが、末尾はないので自分でつける必要があります。

//相対パスのみの場合の画像ファイルのパス
WordPressルート/img/logo.png

//get_template_directory_uri();の場合の画像ファイルのパス
WordPressルート/wp-content/themes/テーマ/img/logo.png

「WordPressのアドレス」のURL

非常にややこしいですが、get_bloginfoはget_optionのラッパー(ユーティリティ)です。

<?php get_option('siteurl'); ?>
<?php get_bloginfo('wpurl'); ?>
<?php echo bloginfo('wpurl '); ?>
<?php echo site_url(); ?>

「サイトのアドレス」のURL

<?php get_bloginfo('siteurl '); ?>
<?php echo bloginfo('siteurl '); //bloginfo('url')は非推奨 ?>
<?php echo home_url(); ?>

PHPの関数やスーパーグローバル変数でURLを取得

HTTPレスポンスヘッダにLocationヘッダを追加することで、接続しているブラウザにリダイレクトを指定できますが、ベタでURLを書くのではなく汎用性も持たせるために、PHPのスーバーグローバル変数$_SERVERからHTTP環境変数を指定します。

dirname($_SERVER[“PHP_SELF”])は稼働中PHPファイルの親ディレクトリ(カレントディレクトリ)を返します。

//Locationヘッダにリダイレクト先のURLをセット
header('Location:https://bahtera.jp/blog/');

//HTTP_HOSTはユーザーがリクエストをドメイン "https://bahtera.jp"
//PHP_SELFはスクリプトのパス "/blog/index.php"
//dirnameで親ディレクトリ "/blog"
header('Location:https://.$_SERVER["HTTP_HOST"].dirname($_SERVER["PHP_SELF"]));