カテゴリー: HTML/CSS/JS
PHP で動作する汎用メールフォーム TransmitMail で、WordPress の機能にあるようなパスワード保護(パスワードを知ってる人だけが本文を閲覧可能)を設定して、パスワードを入れないとフォームが表示されない仕組みを作ってみました。
JavaScript で実装することもできますが、ブラウザのソースを見たらフォーム部分がわかりますし、デベロッパーツールでソースを編集してフォームを表示することもできてしまいます。
一方、TransmitMail は PHP で動作しますので、PHP で実装することにしました。PHP を使えばブラウザのソースには現れません。
“TransmitMail でパスワード保護付きのメールフォームを作る” の続きを読む »
これまで MAMP 6.9 を使用していましたが、7月頃から PHP のバージョンが 7.4.33 の場合、WordPress のダッシュボードに「PHP の更新を推奨」という警告メッセージが表示されるようになりました。WordPress 6.8 の推奨の PHP バージョンが 8.3 以上になったためです。
MAMP 6.9 では PHP 8.2 までしか選べない(8.1 以上に設定するとダッシュボードには警告は出ないが、サイトヘルスには「おすすめの改善」として表示される)ので、最新の MAMP 7.2 にアップデートすることにしました。
実は、MAMP 7 は1年以上前にリリースされていて一度アップデートを試みたことがあるのですが、Apache が起動できず、MAMP が使えないと業務に差し支えるので元に戻したのでした。
今回少し余裕ができたので、一つ一つ手順を追ってアップデートしましたが、MAMP 7 はいろいろと初期設定が変わってるようで、MAMP 6 系のアップデート(MAMP のアップデートと再設定(Dropbox 共有、バーチャルホスト、etc.)のようにすんなりとはいきませんでした。
“MAMP 6 から MAMP 7 へのアップデートでハマった” の続きを読む »
カテゴリー: WordPress
この記事は2023年9月12日に書かれたものです。情報が古い可能性がありますのでご注意ください。
WordPress のブロックエディタ Gutenberg の不要なブロックを非表示にする方法として以下のような手段がありますが、いろいろ試して PHP と JavaScript の併用して制御する方法に落ち着きました(半分妥協)。
- 「設定」の「表示ブロック」で制御する
- プラグイン「Disable Gutenberg Blocks – Block Manager」を使う
- PHP で制御する(ホワイトリスト形式)
- JavaScript で制御する(ホワイトリスト形式/ブラックリスト形式)
まず、「設定」の「表示ブロック」で制御する方法は、ユーザー毎に設定しなければならないこと、設定を知っている人なら誰でも変更できるので使おうと思えば使えてしまうことから却下。
プラグインを使う方法は、埋め込み系のブロックを個別に非表示にすることができないのと、多数のサイトを管理している場合に WordPress のアップデートでブロックが追加されるなどしたとき、それぞれのサイトにログインしてプラグインの設定画面を開いてを再設定するのが面倒。(PHP や JavaScript を編集するのも面倒ですが、コピペできるのでプラグインより多少は楽かと。)
PHP で制御する方法も埋め込み系のブロックを個別に非表示にすることができず、唯一、埋め込み系のブロックを個別に非表示にできて、不要なブロックを指定するブラックリスト形式にもできる JavaScript で制御する方法に決定!と思ったのですが…。
“Gutenberg の不要ブロックを非表示にする方法 … PHP と JavaScript の併用に落ち着く” の続きを読む »
カテゴリー: HTML/CSS/JS
この記事は2022年7月6日に書かれたものです。情報が古い可能性がありますのでご注意ください。
Copyright 表示不要の PHP 製汎用メールフォームシステムの TransmitMail。静的 HTML の Web ページでよく利用させていただいています。
この TransmitMail のテンプレートは HTML ファイルなのですが、ヘッダー部分などで PHP を使いたい場合があります。
だからと言って、header.html を header.php に変えて PHP を組み込み、input.html や confirm.html 等に書かれている {include:header.html} を {include:header.php} と書き換えても、PHP がそのまま文字列として処理されて機能しません。
このような場合、index.php にインクルードするか、直接記述すれば PHP が機能します。
“TransmitMail のテンプレートで PHP を使う” の続きを読む »
カテゴリー: WordPress
この記事は2020年7月11日に書かれたものです。情報が古い可能性がありますのでご注意ください。
WordPress からカスタム投稿タイプの投稿データとそれに関連するデータを CSV で出力したい案件があり、テーマの中のテンプレートを使って実現してみました。
投稿データを CSV で出力できるプラグインはあるようですが、今回一定の条件で絞り込んだり、Advanced Custom Fields の「投稿オブジェクト」カスタムフィールドで紐付けた、別のカスタム投稿タイプの投稿データを一緒に出力する必要があったため、特定のページのテンプレートを作成する要領で実現できないかと考えました。
7年くらい前まで Movable Type を使っていましたが、Movable Type のテンプレートは静的ファイルを書き出すので、書き出すファイル名と拡張子を指定すれば、CSV などのテキストファイルを書き出すことも、CSS や JavaScript のファイルに MT タグを使って、セレクタや値を代入したり変数をループで処理したりすることができました。
一方、WordPress のテンプレートは動的に Web ページを表示するものなので、Movable Type のように簡単には行きません。
でも、以前 WordPress に FullCalendar を組み込んだ際、カレンダーに投稿データを読み込むための JSON 形式のファイルをテンプレートを使って作成したり、同じように Google Map に投稿データからマーカーを生成するための XML 形式のファイルをテンプレートを使って作成した経験がありましたので、まずは同様の方法で CSV 形式のファイルを作成してみました。
“WordPress からテーマのテンプレートを使って CSV を書き出す” の続きを読む »
カテゴリー: HTML/CSS/JS, WordPress
この記事は2019年6月12日に書かれたものです。情報が古い可能性がありますのでご注意ください。
WordPress のサイトから RSS フィードを取得して表示する場合、RSS フィードからデフォルトで取得できる情報は、タイトル、パーマリンク、投稿日、投稿者、概要(本文)くらいで、アイキャッチ画像を取得することはできません。そもそもアイキャッチ画像は RSS フィードに含まれていないので当然です。
そこで、WordPress の RSS テンプレートを加工してアイキャッチ画像を含め、別のサイトでこの RSS フィードを取得して表示してみました。(RSS フィード発信元の WordPress サイトの管理者権限があることが前提です。)
“RSS フィードにアイキャッチ画像を含めて別のサイトで表示する” の続きを読む »
カテゴリー: WordPress
この記事は2017年4月11日に書かれたものです。情報が古い可能性がありますのでご注意ください。
WordPress の管理画面は、以前よく使ってた Movable Type や他の CMS に比べても、とても分かりやすく出来ていると思いますが、さらに使いやすくするために、案件に応じて不要なメニュー項目を削除したり、逆に投稿一覧画面などにはあったら便利という項目を表示させたりしています。
今回、編集者にカスタムメニューの操作権限を与える必要がありました。
まず、通常編集者はカスタムメニューを操作することはできないので、functions.php に以下を記述して操作権限を与えます。
function add_theme_caps(){
$role = get_role( 'editor' );
$role->add_cap( 'edit_theme_options' );
}
add_action( 'admin_init', 'add_theme_caps' );
これで編集者にも[外観]メニューが表示されますが、[テーマ]や[カスタマイズ]などのサブメニューは操作してほしくないのでこれらを消す必要がありましたが、この内[カスタマイズ]については他のサブメニューと URL の形式が異なるため、ちょっと工夫が必要でした。
“管理画面のメニューから[外観]→[カスタマイズ]を消す” の続きを読む »
この記事は2016年6月14日に書かれたものです。情報が古い可能性がありますのでご注意ください。
Word や Excel などの Office ファイルを開くと、“~$ファイル名.xlsx” といった “~$” から始まる名前の一時ファイルが作られます。通常はファイルを閉じるとこの一時ファイルは消えるのですが、外部のサーバに保存してあるファイルを開いた場合などに、一時ファイルが残ったままになることがあります。
これは、Office 2010 以降の「保護されたビュー」が標準で有効になっていることが影響しているようですが、これを無効にすると当然セキュリティが甘くなってしまいます。
今回、WebDAV 機能が使えるレンタルサーバを使って複数人でファイルを共有する案件があり、それぞれに WebDAV アカウンントを作成して、Windows エクスプローラーのネットワークの場所に各自の共有フォルダへのアクセスを設定してもらいました。
そして、運用してみると案の定上記の一時ファイルが残ったままになってしまいました。少しなら都度削除してもらうなどしてもらえばよいのですが、同じファイルを開くたびに “~$~$ファイル名.xlsx” のように一時ファイルが増えていき、非常に邪魔な存在になります。

クライアントからも「何か解決法はないですかね?」といった相談を受けていたので、一時ファイルを一括削除するプログラムを PHP で作り、cron を使って定期的に実行するようにしてみました。
“ディレクトリ配下の MS Office の一時ファイルを一括削除” の続きを読む »
カテゴリー: WordPress
この記事は2016年6月7日に書かれたものです。情報が古い可能性がありますのでご注意ください。
Webページを Facebook 等にシェアした際に適切な情報を表示させる OGP。これを WordPress のテーマファイルに設定する方法は、ググるといろいろ紹介されています。
その中の og:image を設定する部分の記述ですが、大抵、次のように紹介されています。
<?php
$str = $post->post_content;
$searchPattern = '/<img.*?src=(["\'])(.+?)\1.*?>/i'; // 投稿記事に画像があるか調べる
if ( is_single() or is_page() ){ // 記事か固定ページの場合
if ( has_post_thumbnail() ){ // アイキャッチがある場合
$image_id = get_post_thumbnail_id();
$image = wp_get_attachment_image_src( $image_id, 'full');
echo '<meta property="og:image" content="'.$image[0].'">'. "\n";
} elseif ( preg_match( $searchPattern, $str, $imgurl ) && !is_archive() ){ // アイキャッチは無いが画像がある場合
echo '<meta property="og:image" content="'.$imgurl[2].'">'. "\n";
} else { // 画像が1つも無い場合
echo '<meta property="og:image" content="'. get_bloginfo('template_url'). '/images/ogp_image.png">'. "\n";
}
} else { // 記事や固定ページ以外の場合(ホーム、カテゴリーなど)
echo '<meta property="og:image" content="'. get_bloginfo('template_url'). '/images/ogp_image.png">'. "\n";
}
?>
記事ページか固定ページの場合、アイキャッチ画像があればそれを、アイキャッチ画像は無いが本文に画像がある場合はそれを、画像がない場合と記事や固定ページ以外は予め用意したデフォルト画像(上記では ogp_image.png)を設定するという記述です。
ただ、Facebook の仕様では 200×200px に満たないサイズの画像は og:image として設定できないため、上記の記述では、本文内に小さい画像がある場合は、シェアした際に画像が表示されません。
そこで、画像が 200×200px に満たない場合はデフォルト画像を設定するようにしてみました。
“WordPress で og:image を設定する際に小さい画像を除外する” の続きを読む »