<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WordPress &#8211; 技術研究Archive</title>
	<atom:link href="https://numaresearch.com/ura-blog/category/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>https://numaresearch.com/ura-blog</link>
	<description>旧:裏ブログ。 ガジェットレビュー、デスク環境構築、トラブルシューティ ング記録。エンジニアの「思考」と「道具」の保管庫。</description>
	<lastBuildDate>Tue, 07 Apr 2026 01:07:28 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://numaresearch.com/ura-blog/wp-content/uploads/2025/10/cropped-Gemini_Generated_Image_3jloqr3jloqr3jlo-2-32x32.jpg</url>
	<title>WordPress &#8211; 技術研究Archive</title>
	<link>https://numaresearch.com/ura-blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPressの実用的な極小カスタマイズ15選：コピペで運用ストレスをゼロにする技術</title>
		<link>https://numaresearch.com/ura-blog/wordpress-micro-customization-15/</link>
		
		<dc:creator><![CDATA[ぬま畑]]></dc:creator>
		<pubDate>Tue, 07 Apr 2026 00:56:53 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://numaresearch.com/ura-blog/?p=13187</guid>

					<description><![CDATA[小規模カスタマイズ 1. ログイン画面の言語スイッチャーを消去 ■ 目的 不要なUIを削り、ログインフォームをシンプルにする。 ■ 実装コード 現在有効化しているテーマ（または子テーマ）のディレクトリ内にある funct [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">小規模カスタマイズ</h2>



<h3 class="wp-block-heading">1. ログイン画面の言語スイッチャーを消去</h3>



<p>■ 目的</p>



<p>不要なUIを削り、ログインフォームをシンプルにする。</p>



<p>■ 実装コード</p>



<p>現在有効化しているテーマ（または子テーマ）のディレクトリ内にある functions.php の末尾に以下のコードを追記する。</p>



<p>※functions.php は管理画面の外観メニュー内にあるテーマファイルエディターから編集可能だが、構文エラーによる画面の真っ白化（サイトダウン）を防ぐため、必ずFTPソフトやサーバーのファイルマネージャー経由でバックアップを取ってから追記すること。</p>



<p>パスは /wp-content/themes/使用中のテーマ名/functions.php である。</p>



<pre class="wp-block-code"><code>// ログイン画面に表示される言語選択ドロップダウンを非表示にするフィルターフック
// 戻り値として false を返すことで、WordPressのコア機能に対して表示しないという指示を出す
add_filter( 'login_display_language_dropdown', '__return_false' );</code></pre>



<p>■ 結果</p>



<p>ログイン画面下部の言語選択ドロップダウンが非表示になる。</p>



<h3 class="wp-block-heading">2. ログイン時のエラーメッセージを統一</h3>



<p>■ 目的</p>



<p>ユーザー名間違いかパスワード間違いかを判別させず、ハッカーの推測を防ぐセキュリティ対策。</p>



<p>■ 実装コード</p>



<p>同上。functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// ログイン失敗時のエラーメッセージをフックして上書きする
add_filter( 'login_errors', function() {
// ユーザー名間違いでもパスワード間違いでも、常にこの同一の文字列を返す
// これにより、攻撃者がどのユーザー名が存在するかを推測できなくなる
return 'ログイン情報に誤りがあります。';
});</code></pre>



<p>■ 結果</p>



<p>エラー原因に関わらず、指定した同一のエラー文が表示される。</p>



<h3 class="wp-block-heading">3. 管理者メールアドレスの定期確認画面をスキップ</h3>



<p>■ 目的</p>



<p>数ヶ月に一度ログインを阻害してくる確認画面を永続的に出さなくする。</p>



<p>■ 実装コード</p>



<p>同上。functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// 管理者メールアドレスが正しいかどうかの定期確認画面のインターバル設定にフック
// __return_false を指定することで、確認画面の表示トリガーを永続的に無効化する
add_filter( 'admin_email_check_interval', '__return_false' );</code></pre>



<p>■ 結果</p>



<p>ログイン時に管理者メールアドレスの確認を求める画面が表示されなくなる。</p>



<h3 class="wp-block-heading">4. ログイン画面ロゴのツールチップテキストを変更</h3>



<p>■ 目的</p>



<p>マウスホバー時の表示を自サイトのタイトルに上書きし、ブランドの統一感を出す。</p>



<p>■ 実装コード</p>



<p>同上。functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// ログイン画面のロゴにマウスを乗せた際に出るテキストをフックして書き換える
add_filter( 'login_headertext', function() {
// デフォルトのテキストの代わりに、自サイトのタイトルを取得して返す
return get_bloginfo( 'name' );
});</code></pre>



<p>■ 結果</p>



<p>ロゴホバー時のテキストがWordPress標準のものから自サイトのタイトルに変更される。</p>



<h3 class="wp-block-heading">5. HTMLヘッダーからWordPressのバージョン情報を削除</h3>



<p>■ 目的</p>



<p>バージョン依存の脆弱性を突く攻撃からサイトを隠蔽する。</p>



<p>■ 実装コード</p>



<p>同上。functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// サイトのheadタグ内に出力されるWordPressのバージョン情報を削除する
// wp_generator というコアのアクションフックを取り除く処理
// 古いバージョンのWPを使っていることがバレて脆弱性を突かれるリスクを低減する
remove_action( 'wp_head', 'wp_generator' );</code></pre>



<p>■ 結果</p>



<p>ソースコード内のメタタグに出力されていたバージョン情報が完全に消去される。</p>



<h2 class="wp-block-heading">中規模カスタマイズ</h2>



<h3 class="wp-block-heading">6. アップロード画像の日本語ファイル名を自動ハッシュ化</h3>



<p>■ 目的</p>



<p>日本語ファイル名による文字化けやリンク切れを防ぐため、アップロード時にMD5でランダムな英数字に変換する。</p>



<p>■ 実装コード</p>



<p>同上。functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// ファイル名がサニタイズ（無害化）されるタイミングで独自の処理を割り込ませる
add_filter( 'sanitize_file_name', 'numa_hash_filename', 10 );
function numa_hash_filename( $filename ) {
// アップロードされたファイルの情報を拡張子とファイル名に分割して取得する
$info = pathinfo( $filename );
$ext  = empty( $info&#91;'extension'] ) ? '' : '.' . $info&#91;'extension'];

// ファイル名に半角英数字と一部の記号以外（マルチバイト文字等）が含まれているか判定する
if ( preg_match( '/&#91;^a-zA-Z0-9_.-]/', $info&#91;'filename'] ) ) {
    // 日本語が含まれる場合、現在の時間とファイル名を組み合わせてMD5ハッシュに変換し拡張子を戻す
    return md5( time() . $info&#91;'filename'] ) . $ext;
}

// 日本語が含まれていない場合は元のファイル名をそのまま返す
return $filename;
}</code></pre>



<p>■ 結果</p>



<p>日本語名の画像をアップロードしても、自動的に英数字のファイル名に変換されて保存される。</p>



<h3 class="wp-block-heading">7. 自サイトへのセルフピンバックを自動遮断</h3>



<p>■ 目的</p>



<p>内部リンクを貼るたびに飛んでくる不要なコメント通知を停止する。</p>



<p>■ 実装コード</p>



<p>同上。functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// 記事公開時や更新時に他のサイトへ通知を送るpingの直前に処理を割り込ませる
add_action( 'pre_ping', 'numa_disable_self_pingback' );
function numa_disable_self_pingback( &amp;$links ) {
// 自サイトのトップURLを取得する
$home = get_option( 'home' );

// 記事内に含まれるすべてのリンクURLをループ処理で確認する
foreach ( $links as $l =&gt; $link ) {
    // そのリンクURLが自サイトのURLから始まっているかを判定する
    if ( 0 === strpos( $link, $home ) ) {
        // 内部リンクだった場合、pingを送信するURLのリストからそのリンクを除外する
        unset( $links&#91;$l] );
    }
}
}</code></pre>



<p>■ 結果</p>



<p>自分の記事へリンクを張っても、コメント欄にピンバックの承認待ちが届かなくなる。</p>



<h3 class="wp-block-heading">8. 投稿一覧に文字数カラムを追加</h3>



<p>■ 目的</p>



<p>コンテンツボリュームを一目で把握できるようにする。</p>



<p>■ 実装コード</p>



<p>同上。functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// 投稿一覧画面のカラム見出しを追加するフィルターフック
add_filter( 'manage_posts_columns', 'numa_add_character_count_column' );
function numa_add_character_count_column( $columns ) {
// char_count というIDで文字数という名前の列を配列に追加する
$columns&#91;'char_count'] = '文字数';
return $columns;
}

// 追加したカラムの各行に実際のデータを出力するアクションフック
add_action( 'manage_posts_custom_column', 'numa_display_character_count', 10, 2 );
function numa_display_character_count( $column_name, $post_id ) {
// 現在処理している列が先ほど追加した char_count かどうかを確認する
if ( $column_name === 'char_count' ) {
// 該当する記事のデータをIDを元にデータベースから取得する
$post = get_post( $post_id );
// 記事の本文からHTMLタグをすべて取り除き純粋なテキストのみにする
$text = strip_tags( $post-&gt;post_content );
// UTF-8エンコーディングとして文字数をカウントし出力する
echo mb_strlen( $text, 'UTF-8' ) . ' 文字';
}
}</code></pre>



<p>■ 結果</p>



<p>投稿一覧画面に各記事の本文文字数がリアルタイムで計算されて表示される。</p>



<h3 class="wp-block-heading">9. ダッシュボードの不要なウィジェットを削除</h3>



<p>■ 目的</p>



<p>管理画面トップのノイズ要素を消し、システムを軽量化する。</p>



<p>■ 実装コード</p>



<p>同上。functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// 管理画面のダッシュボードが読み込まれる際のセットアップ処理にフックする
add_action( 'wp_dashboard_setup', 'numa_remove_dashboard_widgets' );
function numa_remove_dashboard_widgets() {
// dashboard_primary というIDのメタボックスを削除する
remove_meta_box( 'dashboard_primary', 'dashboard', 'side' );

// dashboard_quick_press というIDのメタボックスを削除する
remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' ); 
}</code></pre>



<p>■ 結果</p>



<p>ダッシュボードから不要なパネルが消去され、すっきりとしたUIになる。</p>



<h3 class="wp-block-heading">10. 記事抜粋末尾のドットを続きを読むリンクに変更</h3>



<p>■ 目的</p>



<p>トップページ等で表示される抜粋文を、クリック可能な自然なリンクへ変える。</p>



<p>■ 実装コード</p>



<p>同上。functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// 記事の抜粋の末尾に出力される文字列を変更するフィルターフック
add_filter( 'excerpt_more', 'numa_custom_excerpt_more' );
function numa_custom_excerpt_more( $more ) {
// デフォルトのドット表記の代わりにクリック可能な続きを読むリンクを出力する
// get_permalink() で現在の記事のURLを動的に取得している
return '... &lt;a href="' . get_permalink() . '"&gt;続きを読む&lt;/a&gt;';
}</code></pre>



<p>■ 結果</p>



<p>抜粋文の末尾が単なる記号ではなく、個別記事へのリンクテキストになる。</p>



<h2 class="wp-block-heading">大規模カスタマイズ</h2>



<h3 class="wp-block-heading">11. リビジョン数の上限固定とオートセーブ間隔の延長</h3>



<p>■ 目的</p>



<p>データベースの肥大化を防ぎ、執筆中のエディタの重さを軽減する。</p>



<p>■ 実装コード</p>



<p>※注意：この設定は functions.php ではなく、WordPressのインストールディレクトリ直下にある wp-config.php に記述する。必ず編集停止の宣言文（That&#8217;s all&#8230;等の英語のコメント）よりも上の行に追記すること。</p>



<pre class="wp-block-code"><code>// データベースに保存される記事の編集履歴の最大数を3回までに制限する
// これによりデータベースの不要な肥大化を物理的に防ぐ
define( 'WP_POST_REVISIONS', 3 );

// 記事執筆中にバックグラウンドで走る自動保存の間隔を設定する
// デフォルトの60秒から300秒（5分）に延長することでエディタのフリーズやサーバー負荷を軽減する
define( 'AUTOSAVE_INTERVAL', 300 );</code></pre>



<p>■ 結果</p>



<p>記事ごとに無制限に増え続けるリビジョンデータが抑えられ、エディタの動作が安定する。</p>



<h3 class="wp-block-heading">12. ログインページへの簡易的なIPアクセス制限</h3>



<p>■ 目的</p>



<p>特定の固定IP以外からのアクセスを弾き、ブルートフォース攻撃を遮断する。</p>



<p>■ 実装コード</p>



<p>functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// ログイン画面が初期化されるタイミングで独自の処理を実行するアクションフック
add_action( 'login_init', 'numa_restrict_login_by_ip' );
function numa_restrict_login_by_ip() {
// ログインを許可するIPアドレスのリストを配列で定義する
// ※必ず自分の現在の固定IPアドレスに変更してから実装すること
$allowed_ips = array( '192.168.1.1', '123.456.789.012' );

// サーバー変数から現在アクセスしてきているユーザーのIPアドレスを取得する
$user_ip = $_SERVER&#91;'REMOTE_ADDR'];

// アクセス元のIPが許可リストの中に存在しない場合
if ( ! in_array( $user_ip, $allowed_ips ) ) {
    // wp_die() 関数を使用してWordPressの処理を強制終了させエラー画面を表示する
    wp_die( 'アクセスが許可されていません。' );
}
}</code></pre>



<p>■ 結果</p>



<p>許可されていないIPからのログイン画面へのアクセスがシステムレベルで拒絶される。</p>



<h3 class="wp-block-heading">13. 記事内のH2見出しから簡易的な目次を自動生成</h3>



<p>■ 目的</p>



<p>プラグインを使わずに、最初のH2見出しの直前に軽量な目次HTMLを自動出力する。</p>



<p>■ 実装コード</p>



<p>functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// 記事の本文が出力される直前に処理を割り込ませるフィルターフック
add_filter( 'the_content', 'numa_auto_toc_insert' );
function numa_auto_toc_insert( $content ) {
// 個別記事ページであり、かつメインのループ処理中である場合のみ実行する
if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {

    // 正規表現を使い、本文の中からすべての h2 タグを探し出す
    // 見つかったテキストは $matches という配列に格納される
    if ( preg_match_all( '/&lt;h2.*?&gt;(&#91;^&lt;]+)&lt;\/h2&gt;/i', $content, $matches ) ) {
        
        // 目次の外枠となるHTML（CSSでスタイル指定済み）の組み立てを開始する
        $toc = '&lt;div style="background:#f9f9f9; padding:15px; border:1px solid #ddd; margin-bottom:2em;"&gt;&lt;strong&gt;■ 目次&lt;/strong&gt;&lt;ul&gt;';
        
        // 見つかった h2 のテキストをループ処理でひとつずつ取り出す
        foreach ( $matches&#91;1] as $title ) {
            // テキストを無害化した上でリスト要素として目次に追加する
            $toc .= '&lt;li&gt;' . esc_html( $title ) . '&lt;/li&gt;';
        }
        
        $toc .= '&lt;/ul&gt;&lt;/div&gt;';
        
        // 本文内にある最初の h2 タグの直前に完成した目次HTMLを挿入して上書きする
        $content = preg_replace( '/&lt;h2/i', $toc . '&lt;h2', $content, 1 );
    }
}
// 加工が完了した本文を画面へ出力するために返す
return $content;
}</code></pre>



<p>■ 結果</p>



<p>本文の最初のH2タグの直前に、見出しを抽出したシンプルな目次ブロックが表示される。</p>



<h3 class="wp-block-heading">14. 投稿一覧に最終更新日カラムを追加してソート可能にする</h3>



<p>■ 目的</p>



<p>情報の鮮度が落ちている古い記事を一覧から特定し、リライト対象を見つける。</p>



<p>■ 実装コード</p>



<p>functions.php の末尾に追記する。</p>



<pre class="wp-block-code"><code>// 投稿一覧画面のカラム見出しを追加するフィルターフック
add_filter( 'manage_posts_columns', 'numa_add_modified_column' );
function numa_add_modified_column( $columns ) {
// modified_date という識別子で最終更新日カラムを追加
$columns&#91;'modified_date'] = '最終更新日';
return $columns;
}

// 追加したカラムの各行に実際のデータを出力するアクションフック
add_action( 'manage_posts_custom_column', 'numa_display_modified_column', 10, 2 );
function numa_display_modified_column( $column_name, $post_id ) {
if ( $column_name === 'modified_date' ) {
// WordPress標準関数で、その記事の最終更新日をフォーマット指定して出力する
echo get_the_modified_date( 'Y/m/d H:i' );
}
}

// カラムのタイトルをクリックした際に並び替え（ソート）可能にするフィルターフック
add_filter( 'manage_edit-post_sortable_columns', 'numa_sortable_modified_column' );
function numa_sortable_modified_column( $columns ) {
// modified_date カラムをクリックした際の内部的な並び替えキーをデータベース上の modified に指定する
$columns&#91;'modified_date'] = 'modified';
return $columns;
}</code></pre>



<p>■ 結果</p>



<p>投稿一覧画面に最終更新日が表示され、クリックで古い順・新しい順の並び替えができるようになる。</p>



<h3 class="wp-block-heading">15. 自作の関連記事ショートコード作成</h3>



<p>■ 目的</p>



<p>同じタグを持つ記事をランダムで3件呼び出す独自のショートコードを作成し、回遊率を高める。</p>



<p>■ 実装コード</p>



<p>functions.php の末尾に追記する。記事の本文内で [numa_related] と記述して使用する。</p>



<pre class="wp-block-code"><code>// numa_related というショートコードをWordPressに登録する
add_shortcode( 'numa_related', 'numa_related_posts_shortcode' );
function numa_related_posts_shortcode() {
// グローバル変数から現在表示中の記事情報を取得
global $post;

// 現在の記事に付与されているすべてのタグの情報を取得する
$tags = wp_get_post_tags( $post-&gt;ID );

if ( $tags ) {
    $tag_ids = array();
    // 取得したタグ情報のオブジェクトからタグのIDだけを抽出して配列にまとめる
    foreach ( $tags as $individual_tag ) {
        $tag_ids&#91;] = $individual_tag-&gt;term_id;
    }
    
    // データベースから関連記事を引っ張ってくるための条件を設定する
    $args = array(
        'tag__in' =&gt; $tag_ids, // 現在の記事と同じタグを持つ記事を対象にする
        'post__not_in' =&gt; array( $post-&gt;ID ), // 今表示している記事そのものはリストから除外する
        'posts_per_page' =&gt; 3, // 取得する記事の最大数を3件に制限する
        'orderby' =&gt; 'rand' // 取得順序をランダムにして毎回違う記事が表示されるようにする
    );
    
    // 設定した条件でデータベースにクエリを投げる
    $my_query = new WP_Query( $args );
    
    if ( $my_query-&gt;have_posts() ) {
        // 出力用のHTMLを格納する変数を用意しリストタグを開始する
        $html = '&lt;ul class="numa-related-posts"&gt;';
        
        while ( $my_query-&gt;have_posts() ) {
            // ループのポインタを進め記事データをセットする
            $my_query-&gt;the_post();
            // リスト要素として記事のURLとタイトルを取得してHTMLに追記する
            $html .= '&lt;li&gt;&lt;a href="' . get_permalink() . '"&gt;' . get_the_title() . '&lt;/a&gt;&lt;/li&gt;';
        }
        
        $html .= '&lt;/ul&gt;';
        
        // クエリによって上書きされたグローバルな記事データを元の状態に復元する
        wp_reset_postdata();
        
        return $html;
    }
}
// 関連記事が見つからなかった場合は何も出力しない
return '';
}</code></pre>



<p>■ 結果</p>



<p>ショートコードを記述した箇所に、現在の記事と同じタグを持つ別記事へのリンクが3件出力される。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPressのContact Form 7でスパム営業を完全に物理破壊する防衛システム構築</title>
		<link>https://numaresearch.com/ura-blog/cf7-spam-block/</link>
		
		<dc:creator><![CDATA[ぬま畑]]></dc:creator>
		<pubDate>Sun, 05 Apr 2026 14:43:17 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://numaresearch.com/ura-blog/?p=13182</guid>

					<description><![CDATA[サイト運営において、プライバシーポリシーを確認しない相互リンク依頼や営業メールは、運営者の時間とリソースを消費するノイズとなります。 この記事では、WordPressプラグインのContact Form 7を対象に、特定 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>サイト運営において、プライバシーポリシーを確認しない相互リンク依頼や営業メールは、運営者の時間とリソースを消費するノイズとなります。</p>



<p>この記事では、WordPressプラグインのContact Form 7を対象に、特定キーワードを含む送信をサーバー側で遮断し、入力されたテキストをブラウザ上でリセットする自動防衛システムの構築手順を解説します。</p>



<h2 class="wp-block-heading">防衛システムの概要と要件</h2>



<p>本システムは、サーバー側での送信ブロック処理と、フロントエンド側での入力データ消去処理の二段構えで構成されます。</p>



<p>エラー表示だけでなく、入力内容を強制的にリセットすることで再送信の手間を増やし、スパム行為を物理的に抑制します。</p>



<h2 class="wp-block-heading">ステップ1：サーバー側での送信ブロック（PHP）</h2>



<p>対象のブラックリストキーワードを検知した場合、メールサーバーへ処理を渡す前にプロセスを終了させます。使用しているテーマのfunctions.phpに以下のコードを追記してください。</p>



<pre class="wp-block-code"><code>
// Contact Form 7 スパム・営業メールブロック機能
add_filter( 'wpcf7_validate', 'purge_spam_inquiries', 10, 2 );

function purge_spam_inquiries( $result, $tags ) {
    // 監視対象とするフォームのname属性
    $target_fields = array( 'your-subject', 'your-message' );

    // 排除するトリガーキーワード群（部分一致で捕捉）
    $blacklist_keywords = array(
        '相互リンク',
        'backlink',
        'SEO対策',
        '質の高い情報発信', 
        '敬意を抱き', 
        '機材提供の相談'
    );

    $submission = WPCF7_Submission::get_instance();
    if ( ! $submission ) {
        return $result;
    }

    $posted_data = $submission-&gt;get_posted_data();

    foreach ( $target_fields as $field ) {
        if ( isset( $posted_data&#91;$field] ) ) {
            $content = $posted_data&#91;$field];

            foreach ( $blacklist_keywords as $keyword ) {
                if ( mb_strpos( $content, $keyword ) !== false ) {
                    // 出力するエラーメッセージ
                    $harsh_message = "【通信遮断・データ破棄】送信プロセスはスパムと判定され強制終了しました。入力されたテキストは消去されています。プライバシーポリシーを確認せずに無差別送信を繰り返す行為はご遠慮ください。当サイトへの営業目的でのアクセスはお断りします。";

                    $result-&gt;invalidate( $field, $harsh_message );
                    break 2;
                }
            }
        }
    }
    return $result;
}
</code></pre>



<h2 class="wp-block-heading">ステップ2：フロントエンドでの入力内容クリア（JavaScript）</h2>



<p>送信ボタンが押された直後から画面を監視し、エラーメッセージが出現した時点で入力データを消去します。以下のコードをbodyタグの終了直前に追加してください。</p>



<pre class="wp-block-code"><code>
&amp;lt;script&amp;gt;
document.addEventListener('DOMContentLoaded', function() {
    var forms = document.querySelectorAll('.wpcf7-form');

    forms.forEach(function(form) {
        // 送信ボタン押下をトリガーとする
        form.addEventListener('submit', function() {

            // 100ミリ秒間隔で画面上のテキストを監視
            var patrol = setInterval(function() {

                // タグを無視して画面に見えている文字だけをスキャン
                if (form.innerText &amp;amp;&amp;amp; form.innerText.indexOf('データ破棄') !== -1) {

                    // 標的文字列を確認後、即座に全入力欄をクリア
                    var inputs = form.querySelectorAll('input, textarea');
                    inputs.forEach(function(input) {
                        if (input.type !== 'submit' &amp;amp;&amp;amp; input.type !== 'hidden' &amp;amp;&amp;amp; input.type !== 'button') {
                            input.value = '';
                        }
                    });

                    clearInterval(patrol);
                }
            }, 100);

            // フェイルセーフ（5秒後に監視プロセスを終了）
            setTimeout(function() {
                clearInterval(patrol);
            }, 5000);

        });
    });
});
&amp;lt;/script&amp;gt;
</code></pre>



<h2 class="wp-block-heading">本システムのメリット</h2>



<p>■サーバーリソースの保護</p>



<p>スパムメールの通信に対して自サーバーのリソースを消費させず、検知した段階で処理を破棄することでサーバーへの負荷を最小限に抑えます。</p>



<p>■プラグイン仕様への非依存</p>



<p>フロントエンドの処理は画面上の物理的な変化を直接監視するため、プラグインのアップデート等による内部仕様の変更に影響されにくい設計です。</p>



<p>■手動スパムへの対策</p>



<p>入力内容が消失する挙動とリロードの手間により、手作業で定型文を送信している業者の再送信を防ぐ効果が期待できます。</p>



<p></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPressブロックエディタのフルスクリーンモードをデフォルトで解除する方法</title>
		<link>https://numaresearch.com/ura-blog/disable-editor-fullscreen/</link>
		
		<dc:creator><![CDATA[ぬま畑]]></dc:creator>
		<pubDate>Wed, 01 Apr 2026 06:00:42 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://numaresearch.com/ura-blog/?p=13172</guid>

					<description><![CDATA[■ 目的 エディタを開くたびに左の管理メニューが消え、他の設定画面へ移動するために毎回アイコンを押して戻す「無駄なクリック工数」に苛立っている運用者のために、常に管理メニューを表示させる設定をデフォルト化する。 ■ 実装 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>■ 目的</p>



<p>エディタを開くたびに左の管理メニューが消え、他の設定画面へ移動するために毎回アイコンを押して戻す「無駄なクリック工数」に苛立っている運用者のために、常に管理メニューを表示させる設定をデフォルト化する。</p>



<p>■ 実装コード</p>



<p>現在有効化しているテーマ（または子テーマ）のディレクトリ内にある functions.php の末尾に以下のコードを追記する。</p>



<p>※functions.php は管理画面の「外観」＞「テーマファイルエディター」から編集可能だが、構文エラーによる画面の真っ白化（サイトダウン）を防ぐため、必ずFTPソフトやサーバーのファイルマネージャー経由でバックアップを取ってから追記すること。</p>



<p>パスは /wp-content/themes/使用中のテーマ名/functions.php である。</p>



<pre class="wp-block-code"><code>// ブロックエディタのフルスクリーンモードをデフォルトでオフにする
add_action('enqueue_block_editor_assets', 'disable_editor_fullscreen_by_default');
function disable_editor_fullscreen_by_default() {
$script = "window.onload = function() {
const isFullscreenMode = wp.data.select( 'core/edit-post' ).isFeatureActive( 'fullscreenMode' );
if ( isFullscreenMode ) {
wp.data.dispatch( 'core/edit-post' ).toggleFeature( 'fullscreenMode' );
}
}";
wp_add_inline_script( 'wp-blocks', $script );
}</code></pre>



<p>■ 結果</p>



<p>記事の新規追加や編集画面を開いた際、左側のWordPress管理メニューが常に表示された状態でエディタが起動する。</p>



<p>■Before</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="505" height="837" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-16.png" alt="" class="wp-image-13176"/></figure>



<p>■After</p>



<figure class="wp-block-image size-full"><img decoding="async" width="631" height="685" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-15.png" alt="" class="wp-image-13175"/></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress管理画面とログイン画面の極小UIチューニング3選</title>
		<link>https://numaresearch.com/ura-blog/admin-ui-micro-tuning-3set/</link>
		
		<dc:creator><![CDATA[ぬま畑]]></dc:creator>
		<pubDate>Tue, 31 Mar 2026 06:00:47 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://numaresearch.com/ura-blog/?p=13160</guid>

					<description><![CDATA[1. ログイン画面の「パスワードをお忘れですか？」リンクを削除 ■ 目的 ログイン画面の下部に表示される不要な導線を消し去り、第三者によるパスワードリセット要求（スパム行為）を物理的に無効化する。 ■ 実装コード 現在有 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">1. ログイン画面の「パスワードをお忘れですか？」リンクを削除</h2>



<p>■ 目的</p>



<p>ログイン画面の下部に表示される不要な導線を消し去り、第三者によるパスワードリセット要求（スパム行為）を物理的に無効化する。</p>



<p>■ 実装コード</p>



<p>現在有効化しているテーマ（または子テーマ）のディレクトリ内にある functions.php の末尾に以下のコードを追記する。</p>



<p>※functions.php は管理画面の「外観」＞「テーマファイルエディター」から編集可能だが、構文エラーによる画面の真っ白化（サイトダウン）を防ぐため、必ずFTPソフトやサーバーのファイルマネージャー経由でバックアップを取ってから追記すること。</p>



<p>パスは /wp-content/themes/使用中のテーマ名/functions.php である。</p>



<pre class="wp-block-code"><code>// ログイン画面の不要なリンクテキスト（#nav）をCSSで非表示にする
function remove_lostpassword_text() {
echo '&lt;style type="text/css"&gt;
#nav { display: none !important; }
&lt;/style&gt;';
}
add_action('login_enqueue_scripts', 'remove_lostpassword_text');</code></pre>



<p>■ 結果</p>



<p>ログインフォーム下の「パスワードをお忘れですか？」というテキストリンクが完全に非表示になる。</p>



<p>■Before</p>



<figure class="wp-block-image size-full"><img decoding="async" width="494" height="223" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-8.png" alt="" class="wp-image-13162"/></figure>



<p>■After</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="595" height="222" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-9.png" alt="" class="wp-image-13163"/></figure>



<h2 class="wp-block-heading">2. 管理画面フッターテキストの独自カスタマイズ</h2>



<p>■ 目的</p>



<p>全管理画面の左下に表示される「WordPress のご利用ありがとうございます。」というテキストを消去し、任意のテキストに変更することで没入感とオリジナリティを高める。</p>



<p>■ 実装コード</p>



<p>同じく functions.php の末尾に以下のコードを追記する。</p>



<pre class="wp-block-code"><code>// 管理画面のフッター左側のテキストを変更する
function custom_admin_footer_text() {
// 任意のテキストを出力
echo '技術研究Archive / 管理システム稼働中';
}
add_filter('admin_footer_text', 'custom_admin_footer_text');</code></pre>



<p>■ 結果</p>



<p>管理画面左下のWordPress標準メッセージが、指定した独自のテキストに上書きされる。</p>



<p>■Before</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="394" height="125" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-10.png" alt="" class="wp-image-13165"/></figure>



<p>■After</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="362" height="93" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-11.png" alt="" class="wp-image-13166"/></figure>



<h2 class="wp-block-heading">3. 記事編集画面のタイトルプレースホルダーの変更</h2>



<p>■ 目的</p>



<p>新規記事作成時の「タイトルを追加」という標準の薄いテキストを独自の文言に変更し、執筆時の意識付け（SEOキーワードの含有など）を強制する。</p>



<p>■ 実装コード</p>



<p>同じく functions.php の末尾に以下のコードを追記する。</p>



<pre class="wp-block-code"><code>// 記事編集画面のタイトルプレースホルダーテキストを変更する
function custom_title_placeholder($title) {
$screen = get_current_screen();
// 投稿画面と固定ページ画面のみ適用
if ($screen-&gt;post_type == 'post' || $screen-&gt;post_type == 'page') {
$title = '記事タイトルを入力（SEOキーワード必須）';
}
return $title;
}
add_filter('enter_title_here', 'custom_title_placeholder');</code></pre>



<p>■ 結果</p>



<p>新規投稿画面を開いた際、タイトル入力欄に「記事タイトルを入力（SEOキーワード必須）」というプレースホルダーテキストが表示される。</p>



<p>■Before</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1060" height="318" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-12.png" alt="" class="wp-image-13168"/></figure>



<p>■After</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="954" height="248" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-13.png" alt="" class="wp-image-13170"/></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPressの管理画面（投稿一覧）に記事IDを表示しソート可能にする方法</title>
		<link>https://numaresearch.com/ura-blog/admin-post-id-column/</link>
		
		<dc:creator><![CDATA[ぬま畑]]></dc:creator>
		<pubDate>Mon, 30 Mar 2026 06:00:04 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://numaresearch.com/ura-blog/?p=13151</guid>

					<description><![CDATA[■ 目的 管理画面の投稿一覧および固定ページ一覧に記事ID（Post ID）の列を新規追加し、ID順でのソート（並び替え）を可能にする。ショートコードによる特定記事の呼び出しや除外設定など、運用時にIDを即座に視認・取得 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>■ 目的</p>



<p>管理画面の投稿一覧および固定ページ一覧に記事ID（Post ID）の列を新規追加し、ID順でのソート（並び替え）を可能にする。ショートコードによる特定記事の呼び出しや除外設定など、運用時にIDを即座に視認・取得できる環境を構築する。</p>



<p>■ 実装コード</p>



<p>現在有効化しているテーマ（または子テーマ）のディレクトリ内にある functions.php の末尾に以下のコードを追記する。<br>※functions.php は管理画面の「外観」＞「テーマファイルエディター」から編集可能だが、構文エラーによる画面の真っ白化（サイトダウン）を防ぐため、必ずFTPソフトやサーバーのファイルマネージャー経由でバックアップを取ってから追記すること。</p>



<p>パスは /wp-content/themes/使用中のテーマ名/functions.php である。</p>



<p>また、表示オプション（画面右上のプルダウン）へのチェックボックス追加機能については、WordPressのコア機能仕様により、カラム（列）を新規登録した時点で自動的に生成・追加されるため、専用の記述は不要である。</p>



<pre class="wp-block-code"><code>// 1. カラム（列）の追加（投稿・固定ページの両方に適用）
add_filter('manage_posts_columns', 'add_post_id_column');
add_filter('manage_pages_columns', 'add_post_id_column');
function add_post_id_column($columns) {
    // 列の先頭（チェックボックスの直後）にID列を挿入するための配列再構築
    $new_columns = array();
    foreach ($columns as $key =&gt; $value) {
        $new_columns&#91;$key] = $value;
        if ($key == 'cb') {
            $new_columns&#91;'post_id'] = 'ID';
        }
    }
    return $new_columns;
}

// 2. 追加したカラムに実際の記事IDを出力する
add_action('manage_posts_custom_column', 'display_post_id_column', 10, 2);
add_action('manage_pages_custom_column', 'display_post_id_column', 10, 2);
function display_post_id_column($column_name, $post_id) {
    if ($column_name == 'post_id') {
        // 現在のループにおける記事IDをそのまま出力
        echo $post_id;
    }
}

// 3. 追加したIDカラムをソート（並び替え）可能にする
add_filter('manage_edit-post_sortable_columns', 'sortable_post_id_column');
add_filter('manage_edit-page_sortable_columns', 'sortable_post_id_column');
function sortable_post_id_column($columns) {
    // 内部的なソートキーとして WordPress標準の ID を指定
    $columns&#91;'post_id'] = 'ID';
    return $columns;
}

// 4. 管理画面側のCSSを出力し、IDカラムの横幅を最適化する
add_action('admin_head', 'post_id_column_css');
function post_id_column_css() {
    echo '&lt;style type="text/css"&gt;
        .column-post_id { width: 60px !important; text-align: center; }
    &lt;/style&gt;';
}</code></pre>



<p>■ 結果</p>



<p>投稿および固定ページ一覧の左端（チェックボックスの横）にID列が追加され、列の見出しをクリックすることでIDの昇順・降順ソートが可能になる。</p>



<p>また、画面右上の表示オプションを開くと自動的にIDの項目が生成されており、チェックの着脱で表示・非表示の切り替えが機能する。</p>



<p>■Before</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1371" height="509" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-4.png" alt="" class="wp-image-13154"/></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="977" height="265" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-6.png" alt="" class="wp-image-13157"/></figure>



<p>※表示オプション</p>



<p>■After</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1391" height="508" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-5.png" alt="" class="wp-image-13155"/></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="478" height="279" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-7.png" alt="" class="wp-image-13158"/></figure>



<p>※表示オプション</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPressのログイン画面ロゴをオリジナル画像に変更する方法</title>
		<link>https://numaresearch.com/ura-blog/custom-login-logo/</link>
		
		<dc:creator><![CDATA[ぬま畑]]></dc:creator>
		<pubDate>Sun, 29 Mar 2026 06:00:08 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://numaresearch.com/ura-blog/?p=13146</guid>

					<description><![CDATA[■ 目的 WordPressのログイン画面のロゴ画像を独自の自社ロゴ等に変更し、オリジナリティを反映させる。 ■ 実装コード：functions.phpの末尾に追記 Before After]]></description>
										<content:encoded><![CDATA[
<p>■ 目的</p>



<p>WordPressのログイン画面のロゴ画像を独自の自社ロゴ等に変更し、オリジナリティを反映させる。</p>



<p>■ 実装コード：functions.phpの末尾に追記</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="930" height="324" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-2.png" alt="" class="wp-image-13149"/></figure>



<pre class="wp-block-code"><code>// ログイン画面のヘッダー読み込み時にフックしてCSSを出力する関数
function custom_login_logo() {
    // get_stylesheet_directory_uri() は現在有効なテーマ（子テーマ含む）のディレクトリURLを動的に取得する標準関数
    echo '&lt;style type="text/css">
        #login h1 a, .login h1 a {
            background-image: url(' . get_stylesheet_directory_uri() . '/images/custom-login-logo.png);
            height: 65px;
            width: 320px;
            background-size: contain;
            background-repeat: no-repeat;
            padding-bottom: 30px;
        }
    &lt;/style>';
}
add_action( 'login_enqueue_scripts', 'custom_login_logo' );</code></pre>



<p>Before</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="482" height="422" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image-1.png" alt="" class="wp-image-13148"/></figure>



<p>After</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="523" height="455" src="https://numaresearch.com/ura-blog/wp-content/uploads/2026/03/image.png" alt="" class="wp-image-13147"/></figure>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
