<?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 Memo</title>
	<atom:link href="https://blog.riverforest-wp.info/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.riverforest-wp.info</link>
	<description>WordPress に関する覚え書き</description>
	<lastBuildDate>Fri, 14 Nov 2025 00:34:25 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.riverforest-wp.info/wp-content/uploads/2018/05/cropped-icon-256x256-1-32x32.png</url>
	<title>WordPress Memo</title>
	<link>https://blog.riverforest-wp.info</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Plugin Check の WordPress のフック名に関するエラーについて</title>
		<link>https://blog.riverforest-wp.info/nonprefixedhooknamefound/</link>
		
		<dc:creator><![CDATA[Katsushi Kawamori]]></dc:creator>
		<pubDate>Thu, 13 Nov 2025 00:14:15 +0000</pubDate>
				<category><![CDATA[Filter]]></category>
		<category><![CDATA[フック]]></category>
		<guid isPermaLink="false">https://blog.riverforest-wp.info/?p=4122</guid>

					<description><![CDATA[はじめに 久しぶりに、Plugin Check でプラグインをチェックしていたら、 などというエラーが出てきました。 フック名は、プラグインのプレフィクス（接頭辞）が最初になければならない。 という事です。このような事は [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">はじめに</h3>



<p>久しぶりに、<strong><a href="https://ja.wordpress.org/plugins/plugin-check/" target="_blank" rel="noreferrer noopener">Plugin Check</a></strong> でプラグインをチェックしていたら、</p>



<pre class="prism line-numbers"><code class="language-php language-html">Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "****_****". </code></pre>



<p>などというエラーが出てきました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>フック名は、プラグインのプレフィクス（接頭辞）が最初になければならない。</p>
</blockquote>



<p>という事です。このような事は知らなかったので、いろいろ調べてみました。</p>



<div class="pluginstatsview-card-wrap">
	<div>
		<img decoding="async" src="https://ps.w.org/plugin-check/assets/icon.svg?rev=3166100" alt="Plugin Check (PCP) のアイコン" class="pluginstatsview-card-icon" />
		<div class="pluginstatsview-after-icon">
			<div class="pluginstatsview-bold"><a href="https://github.com/WordPress/plugin-check" class="pluginstatsview-astyle">Plugin Check (PCP)</a></div>
			<div class="pluginstatsview-small">Plugin Check は WordPress.org のツールで、プラグインがディレクトリの要件を満たし、様々なベストプラク&#8230;</div>
			<div class="pluginstatsview-small">作者: <a href="https://profiles.wordpress.org/wordpressdotorg/">WordPress.org</a></div>
			<div style="clear: both;"></div>
		</div>
	</div>
	<div style="clear: both;"></div>

	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left"><a href="https://github.com/WordPress/plugin-check#reviews" title="4.4(5点満点中)" class="pluginstatsview-astyle">	<span class="pluginstatsview-stars">
					<span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-half"></span>
			</span>
	</a>(32)</span>
		<span class="pluginstatsview-card-right">最終更新: 2週間 前</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">8,000以上サイトで有効化中</span>
		<span class="pluginstatsview-card-right">検証済み: 7.0</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">ダウンロード: <a href="https://downloads.wordpress.org/plugin/plugin-check.1.9.0.zip" class="dashicons dashicons-download pluginstatsview-download"></a></span>
		<span class="pluginstatsview-card-right">リリース: 2011-09-04</span>
	</div>
	<div class="pluginstatsview-small pluginstatsview-card-center">
		2026-03-31 09:30 時点の統計	</div>
</div>



<h3 class="wp-block-heading">プラグインハンドブック</h3>



<p>ハンドブックを調べたら、以下の様な記述がありました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>命名衝突</p>



<p>命名衝突（「衝突」）は、2人の開発者が全く異なる目的で同じフック名を使用した場合に発生します。これにより、発見が困難なバグが生じます。そのため、他のプラグインとのフック名衝突を避けるために、フック名に一意の文字列をプレフィックスとして付けることが重要です。</p>



<p>例えば、email_body という名前のフィルターは汎用性が高いため、複数の開発者が異なるプラグインで異なる目的で使用する可能性があります。これを避けるため、プレフィックスを追加します。例えば、このハンドブックで例として使用されている関数では、wporg_ をプレフィックスとして使用しています。</p>



<p>プレフィックスを選択する際には、会社名、WPハンドル、プラグイン名など、好きなものを使用できます。目的は一意性を確保することですので、慎重に選択してください。</p>
<cite><a href="https://developer.wordpress.org/plugins/hooks/custom-hooks/" target="_blank" rel="noreferrer noopener">https://developer.wordpress.org/plugins/hooks/custom-hooks/</a></cite></blockquote>



<p>特に、言及されていません。記事の更新は、2025年3月20日となっていました。</p>



<style>
.simpleblogcard_img_block0f1b87f5b6a05f0711a876bef6d2b769 {
  float: right;
  padding: 10px;
}
.simpleblogcard_border0f1b87f5b6a05f0711a876bef6d2b769 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title0f1b87f5b6a05f0711a876bef6d2b769 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description0f1b87f5b6a05f0711a876bef6d2b769 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://developer.wordpress.org/plugins/hooks/custom-hooks/ target="_blank" rel="noopener">
				<figure class="simpleblogcard_img_block0f1b87f5b6a05f0711a876bef6d2b769">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 52px;" src="https://developer.wordpress.org/wp-content/themes/wporg-developer-2023/images/opengraph-image.png" alt="Custom Hooks – Plugin Handbook | Developer.WordPress.org" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border0f1b87f5b6a05f0711a876bef6d2b769">
			developer.wordpress.org			<div class="simpleblogcard_title0f1b87f5b6a05f0711a876bef6d2b769">
				Custom Hooks – Plugin Handbook | Developer.WordPress.org			</div>
							<div class="simpleblogcard_description0f1b87f5b6a05f0711a876bef6d2b769">
					An important, but often overlooked practice is using custom hooks in your plugin so that o&#8230;				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>



<h3 class="wp-block-heading">代表的なプラグインの状況</h3>



<p><strong><a href="https://ja.wordpress.org/plugins/akismet/" target="_blank" rel="noreferrer noopener">Akismet</a></strong> と、<strong><a href="https://ja.wordpress.org/plugins/jetpack/" target="_blank" rel="noreferrer noopener">Jetpack</a></strong> を調べてみました。</p>



<pre class="prism line-numbers"><code class="language-php language-html">wp plugin check wordpress/wp-content/plugins/akismet | grep "NonPrefixedHooknameFound"

728     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "delete_comment".
739     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "deleted_comment".
579     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "comment_remove_author_url".
592     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "comment_add_author_url".

wp plugin check wordpress/wp-content/plugins/jetpack | grep "NonPrefixedHooknameFound"
1631    24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "updating_jetpack_version".
1768    42      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "all_plugins".
1951    24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "updating_jetpack_version".
1979    20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "updating_jetpack_version".
2740    24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "updating_jetpack_version".
4750    28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "updating_jetpack_version".
1503    51      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "is_jetpack_site".
1731    41      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_thumbnail_sizes".
1745    62      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_thumbnail_size_urls".
2066    37      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "restapi_theme_action_copy_dirs".
2083    20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "restapi_theme_after_setup_theme".
2098    20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "restapi_theme_init".
2249    41      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_allowed_post_types".
2567    57      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_clients_allowed_video_uploads".
2584    39      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "video_upload_filetypes".
554     40      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "get_attachment".
743     57      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_enabled_sitewide".
985     41      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_thumbnail_sizes".
122     57      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_title".
332     50      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wp_xmlrpc_server_class".
820     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wp_login_failed".
842     32      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wp_login_failed".
926     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wp_login".
978     32      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "login_redirect".
997     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wp_login_failed".
1188    47      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "login_redirect".
257     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_allowed_post_types".
278     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_allowed_public_metadata".
454     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "all_plugins".
272     17      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "failed_jetpack_search_query".
314     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "did_jetpack_search_query".
778     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "active_plugins".
1774    31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_subject".
710     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_akismet".
1049    17      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_akismet".
1067    17      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_akismet".
1681    32      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_content".
2149    31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_is_spam_akismet".
550     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_akismet".
1124    24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_akismet".
1134    24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_akismet".
1188    43      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_subject".
1493    28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_akismet".
1954    49      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_to".
2018    35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_subject".
2240    35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "contact_form_message".
107     50      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "password_checker_common_passwords".
116     57      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "password_checker_minimum_password_length".
125     54      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "password_checker_minimum_entropy_bits".
267     33      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "password_checker_tests".
545     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jpp_log_failed_attempt".
801     29      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jpp_allow_login".
867     55      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jpp_use_captcha_when_blocked".
902     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jpp_kill_login".
140     35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "all_plugins".
226     35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "all_plugins".
65      46      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "excerpt_length".
69      44      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "excerpt_more".
237     36      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "featured_content_post_ids".
252     39      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "featured_content_post_ids".
277     39      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "featured_content_post_ids".
287     35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "featured_content_post_ids".
685     17      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "featured_content_default_settings".
179     35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "classic_theme_helper_should_display_portfolios".
1082    17      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "portfolio-project-post-class".
178     35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "classic_theme_helper_should_display_testimonials".
903     35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "testimonial-entry-post-class".
93      31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "publicize_api_url".
270     32      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "connection_disconnected".
610     48      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "publicize_should_publicize_published_post".
725     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "publicize_should_publicize_published_post".
105     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "pre_admin_screen_sharing".
484     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "publicize_classic_editor_form_before".
494     33      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "publicize_form".
502     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "publicize_classic_editor_form_after".
185     32      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpas_default_message".
201     32      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpas_default_prefix".
216     32      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpas_default_suffix".
894     39      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpas_submit_post?".
935     43      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "publicize_checkbox_default".
952     47      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "publicize_checkbox_global_default".
1342    47      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpas_submit_post?".
1385    28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "publicize_save_meta".
178     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "import_post_meta".
67      52      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_get_max_batch_size".
409     49      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "'jitm_' . $envelope-&gt;CTA-&gt;hook".
415     53      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "'jitm_' . $envelope-&gt;content-&gt;hook".
252     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "myjetpack_enqueue_scripts".
148     43      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "akismet_get_api_key".
50      27      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "deprecated_function_trigger_error".
92      27      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "deprecated_file_trigger_error".
767     45      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "subscribe_field_id".
1022    17      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "earn_track_paywalled_post_view".
1098    20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpsc_add_cookie".
477     13      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wp_sharing_email_send_post_subject".
3106    29      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "ai_seo_enhancer_enabled".
206     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wp_loaded".
236     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "enqueue_block_assets".
237     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "enqueue_block_editor_assets".
127     52      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "react_connection_errors_initial_state".
238     111     ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "active_plugins".
156     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_enabled".
158     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_authentication_errors".
120     53      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "better_password_min_length".
190     35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "ical_get_current_time".
128     38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "a8c_wpcom_masterbar_enqueue_rtl_notification_styles".
314     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "tiled_gallery_content_width".
509     50      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "subscribe_field_id".
353     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "easy_markdown_support_url".
571     57      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "content_save_pre".
578     57      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "content_save_pre".
870     43      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "comment_cookie_lifetime".
363     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "pre_admin_screen_sharing".
726     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "post_admin_screen_sharing".
76      16      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "start_sharing_meta_box_content".
98      16      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "end_sharing_meta_box_content".
1067    13      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wp_sharing_email_send_post_subject".
852     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "custom_ajax_infinite_scroll".
1834    52      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "mejs_settings".
844     32      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "video_flash_params".
712     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "widget_conditions_save".
722     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "widget_conditions_delete".
489     53      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_enabled_sitewide".
515     53      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_enabled_sitewide".
67      46      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "excerpt_length".
69      44      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "excerpt_more".
1412    32      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_title".
2035    38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_allowed_post_types".
323     55      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "comment_cookie_lifetime".
178     38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "post_password_expires".
143     48      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "gallery_widget_content_width".
114     45      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "widget_text".
123     53      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_widths".
175     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_maybe_disable".
195     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_maybe_disable_single_images".
216     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_load_for_images_linked_to_file".
238     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_asset_version".
289     30      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_force_enable".
312     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_thumbnails_shown".
411     38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_add_data_to_container".
500     83      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_permalink".
542     48      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_localize_strings".
564     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_enqueue_assets".
1033    42      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_add_data_to_container".
1101    20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_check_blog_user_privileges".
1247    20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_check_blog_user_privileges".
1328    20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "jp_carousel_post_attachment_comment".
229     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "post_gallery".
261     59      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wp_title".
454     36      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "crowdsignal_shortcode_before".
478     36      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "crowdsignal_shortcode_before".
414     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "video_embed_html".
517     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "youtube_width".
528     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "youtube_height".
587     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "oembed_result".
1385    35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_content".
1388    35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_content_feed".
1410    61      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_title_rss".
1511    63      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_title_rss".
46      24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "post_flair_disable".
61      33      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "likes_meta_box_title".
91      20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "start_likes_meta_box_content".
112     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "end_likes_meta_box_content".
131     38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_enabled_sitewide".
234     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "pre_admin_screen_sharing".
433     38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_likes_visible".
456     13      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_single_{$post_type}_disabled".
502     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_get_options".
521     38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_index_disabled".
540     38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_single_page_disabled".
559     38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_attachment_disabled".
643     38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_reblogging_enabled_sitewide".
253     39      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "comment_like_button".
104     47      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "is_jetpack_site".
280     69      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_enabled_sitewide".
595     40      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "get_attachment".
222     33      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "list_pages".
680     57      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_enabled_sitewide".
922     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_inserted_post".
319     43      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "site_settings_site_format".
568     56      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "site_settings_endpoint_get".
785     33      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_update_site_settings".
1063    70      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_site_icon_cleared".
1335    49      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "'site_settings_endpoint_update_' . $key".
597     57      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_enabled_sitewide".
848     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_inserted_post".
355     45      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "all_plugins".
375     34      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "show_network_active_plugins".
676     57      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_enabled_sitewide".
918     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_inserted_post".
1056    24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "delete_term_relationships".
1071    28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "deleted_term_relationships".
428     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "did_jetpack_search_query".
34      45      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_allowed_public_metadata".
759     41      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_allowed_post_types".
1244    38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wpl_is_enabled_sitewide".
37      31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "pre_jetpack_is_mobile".
341     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "'pre_update_jetpack_option_' . $name".
133     64      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "identity_crisis_container_id".
187     43      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "https_local_ssl_verify".
311     47      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "https_local_ssl_verify".
412     44      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "plugin_action_links".
418     44      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "plugin_action_links_{$plugin_file}".
562     59      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_content".
563     59      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_excerpt".
293     24      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "woocommerce_remove_order_item_ids".
263     39      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "woocommerce_cart_item_product".
550     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "woocommerce_is_cart".
664     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "woocommerce_is_checkout".
28      31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "woocommerce_analytics_experimental_proxy_tracking_enabled".
46      31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "woocommerce_analytics_clickhouse_enabled".
65      20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "woocommerce_analytics_init".
128     33      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "intermediate_image_sizes_advanced".
1244    31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "photon_validate_image_url".
101     13      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "classic_theme_helper_theme_compat_files".
46      41      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_content".
56      47      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "tonesque_image_url".
308     46      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "video_embed_html".
159     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "the_content".
81      33      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "breve_enabled".
85      33      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "ai_seo_enhancer_enabled".
99      28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "list_to_table_transform_enabled".
113     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "ai_response_feedback_enabled".
130     41      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "earn_get_user_subscriptions_for_site_id".
231     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "earn_user_has_access".
124     45      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "earn_get_user_subscriptions_for_site_id".
85      36      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "option_jetpack_active_modules".
97      36      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "option_jetpack_active_modules".
409     44      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "get_the_excerpt".
58      47      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "tonesque_image_url".
63      72      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "active_plugins".
230     39      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "woocommerce_cart_item_product".
163     27      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "woocommerce_is_checkout".
270     34      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "wp_video_embed_handler".
154     35      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "vimeo_width".
165     36      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "vimeo_height".
256     28      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "video_embed_html".
82      38      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "brightcove_dimensions".
38      27      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "pre_jetpack_get_google_fonts_data".
112     31      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_localize_response".
408     54      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "sites_site_format".
483     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "pre_render_site_response_key".
541     47      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "sites_site_options_format".
666     20      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "post_render_site_response_key".
84      33      ERROR   WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound   Hook names invoked by a theme/plugin should start with the theme/plugin prefix. Found: "rest_api_localize_response".</code></pre>



<p><strong>Akismet</strong> は４件ですが、<strong>Jetpack</strong> は200件以上エラーが出てきました。</p>



<div class="pluginstatsview-card-wrap">
	<div>
		<img decoding="async" src="https://ps.w.org/akismet/assets/icon-256x256.png?rev=2818463" alt="Akismet Anti-spam: Spam Protection のアイコン" class="pluginstatsview-card-icon" />
		<div class="pluginstatsview-after-icon">
			<div class="pluginstatsview-bold"><a href="https://akismet.com/" class="pluginstatsview-astyle">Akismet Anti-spam: Spam Protection</a></div>
			<div class="pluginstatsview-small">スパムのコメントやスパムをコンタクトフォームでブロックするための最善のスパム対策保護。WordPress と WooCommer&#8230;</div>
			<div class="pluginstatsview-small">作者: <a href="https://profiles.wordpress.org/automattic/">Automattic</a></div>
			<div style="clear: both;"></div>
		</div>
	</div>
	<div style="clear: both;"></div>

	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left"><a href="https://akismet.com/#reviews" title="4.7(5点満点中)" class="pluginstatsview-astyle">	<span class="pluginstatsview-stars">
					<span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-half"></span>
			</span>
	</a>(1174)</span>
		<span class="pluginstatsview-card-right">最終更新: 5か月 前</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">600万以上サイトで有効化中</span>
		<span class="pluginstatsview-card-right">検証済み: 6.9.4</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">ダウンロード: <a href="https://downloads.wordpress.org/plugin/akismet.5.6.zip" class="dashicons dashicons-download pluginstatsview-download"></a></span>
		<span class="pluginstatsview-card-right">リリース: 2005-10-20</span>
	</div>
	<div class="pluginstatsview-small pluginstatsview-card-center">
		2026-03-31 09:30 時点の統計	</div>
</div>



<div class="pluginstatsview-card-wrap">
	<div>
		<img decoding="async" src="https://ps.w.org/jetpack/assets/icon.svg?rev=2819237" alt="Jetpack &#8211; WP セキュリティ、バックアップ、高速化、成長 のアイコン" class="pluginstatsview-card-icon" />
		<div class="pluginstatsview-after-icon">
			<div class="pluginstatsview-bold"><a href="https://jetpack.com" class="pluginstatsview-astyle">Jetpack &#8211; WP セキュリティ、バックアップ、高速化、成長</a></div>
			<div class="pluginstatsview-small">バックアップ、WAF、マルウェアスキャンなどの強力なワンクリックツールで、WP のセキュリティを向上させます。 統計情報、CDN&#8230;</div>
			<div class="pluginstatsview-small">作者: <a href="https://profiles.wordpress.org/automattic/">Automattic</a></div>
			<div style="clear: both;"></div>
		</div>
	</div>
	<div style="clear: both;"></div>

	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left"><a href="https://jetpack.com#reviews" title="3.8(5点満点中)" class="pluginstatsview-astyle">	<span class="pluginstatsview-stars">
					<span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-empty"></span>
			</span>
	</a>(2382)</span>
		<span class="pluginstatsview-card-right">最終更新: 4週間 前</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">300万以上サイトで有効化中</span>
		<span class="pluginstatsview-card-right">検証済み: 6.9.4</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">ダウンロード: <a href="https://downloads.wordpress.org/plugin/jetpack.15.6.zip" class="dashicons dashicons-download pluginstatsview-download"></a></span>
		<span class="pluginstatsview-card-right">リリース: 2011-01-20</span>
	</div>
	<div class="pluginstatsview-small pluginstatsview-card-center">
		2026-03-31 09:30 時点の統計	</div>
</div>



<h3 class="wp-block-heading">Plugin Check を調べてみる</h3>



<p>readme.txt を、hook や name で検索してもそれらしい追加履歴は見つかりませんでした。唯一、name で似たようなものは以下でした。これはクラス名に関するプレフィクス（接頭辞）に関するものです。</p>



<pre class="prism line-numbers"><code class="language-php language-html">変更履歴
1.7.0
・Enhancement – Add prefixing check to ensure proper function and class name prefixing</code></pre>



<style>
.simpleblogcard_img_block642c32aaa026a6ba82902dbf141ad1c0 {
  float: right;
  padding: 10px;
}
.simpleblogcard_border642c32aaa026a6ba82902dbf141ad1c0 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title642c32aaa026a6ba82902dbf141ad1c0 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description642c32aaa026a6ba82902dbf141ad1c0 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://ja.wordpress.org/plugins/plugin-check/#developers target="_blank" rel="noopener">
				<figure class="simpleblogcard_img_block642c32aaa026a6ba82902dbf141ad1c0">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 32px;" src="https://ps.w.org/plugin-check/assets/banner-772x250.png?rev=3166100" alt="Plugin Check (PCP) – WordPress プラグイン | WordPress.org 日本語" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border642c32aaa026a6ba82902dbf141ad1c0">
			ja.wordpress.org			<div class="simpleblogcard_title642c32aaa026a6ba82902dbf141ad1c0">
				Plugin Check (PCP) – WordPress プラグイン | WordPress.org 日本語			</div>
							<div class="simpleblogcard_description642c32aaa026a6ba82902dbf141ad1c0">
					Plugin Check は WordPress.org のツールで、プラグインがディレクトリの要件を満たし、様々なベストプラクティスに従うためのチェックを提供します。				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>



<h3 class="wp-block-heading">対応方法</h3>



<p>現在のフック名を生かしながら、新しいフック名を設定し移行を促すという方法があります。<code class="language-php language-html">do_action_deprecated</code> フックを利用します。</p>



<pre class="prism line-numbers"><code class="language-php language-html">/* プラグインのスラッグを myplugin とする */
function myplugin_trigger_save_hooks( $post_id ) {
    /* 新フック */
    do_action( 'myplugin_save_post_data', $post_id );

    /* 旧フックも呼び出す（互換性維持）*/
    do_action_deprecated(
        'mp_save_post', /* 旧フック */
        array( $post_id ),
        '5.0.0', /* フックを非推奨にした WordPress のバージョン */
        'myplugin_save_post_data',/* 旧フックを代替えする新フック */
        'Please use myplugin_save_post_data instead.' /* 新フックへの乗り換えを促すメッセージ */
    );
}</code></pre>



<style>
.simpleblogcard_img_block56733c80ac36e5f760a7db372daf05a5 {
  float: right;
  padding: 10px;
}
.simpleblogcard_border56733c80ac36e5f760a7db372daf05a5 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title56733c80ac36e5f760a7db372daf05a5 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description56733c80ac36e5f760a7db372daf05a5 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://developer.wordpress.org/reference/functions/do_action_deprecated/ target="_blank" rel="noopener">
				<figure class="simpleblogcard_img_block56733c80ac36e5f760a7db372daf05a5">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 52px;" src="https://developer.wordpress.org/wp-content/themes/wporg-developer-2023/images/opengraph-image.png" alt="do_action_deprecated() – Function | Developer.WordPress.org" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border56733c80ac36e5f760a7db372daf05a5">
			developer.wordpress.org			<div class="simpleblogcard_title56733c80ac36e5f760a7db372daf05a5">
				do_action_deprecated() – Function | Developer.WordPress.org			</div>
							<div class="simpleblogcard_description56733c80ac36e5f760a7db372daf05a5">
					Fires functions attached to a deprecated action hook.				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>



<p>上記の様にすると、<code class="language-php language-html">WP_DEBUG = true</code> のとき、以下の様なメッセージが出ます。</p>



<pre class="prism line-numbers"><code class="language-php language-html">The 'mp_save_post' hook is deprecated since version 5.0.0! 
Use 'myplugin_save_post_data' instead.</code></pre>



<p>しかし、こんなメッセージをマメにチェックする人なんていませんね。</p>



<h3 class="wp-block-heading">終わりに</h3>



<p>このエラーに関しては、WordPress プラグインチームが、「新規にプラグインを作成する場合に、プラグイン名をフックのプレフィクス（接頭辞）にしてください。」との推奨事項なのではないかと推測します。世界中のプラグインがこのエラーに従ってフック名を修正し始めたら大変な事になりますので、この先に必須となるルールにはならないと思います。</p>



<p>無視して良いエラーなのではないかと思います。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>プラグインとシェルスクリプトで静的生成サイトの構築</title>
		<link>https://blog.riverforest-wp.info/static-site-generator/</link>
		
		<dc:creator><![CDATA[Katsushi Kawamori]]></dc:creator>
		<pubDate>Sun, 11 May 2025 00:29:42 +0000</pubDate>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[サイト構築]]></category>
		<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[静的化]]></category>
		<guid isPermaLink="false">https://blog.riverforest-wp.info/?p=4069</guid>

					<description><![CDATA[はじめに 先日、静的生成サイトを構築するプラグインを出しました。その補完として、そのプラグインを利用したサイト構築のためのシェルスクリプトを掲載します。このプラグインは、WP-CLI でのみ動作します。 このブログは、こ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">はじめに</h3>



<p>先日、静的生成サイトを構築するプラグインを出しました。その補完として、そのプラグインを利用したサイト構築のためのシェルスクリプトを掲載します。このプラグインは、WP-CLI でのみ動作します。</p>



<div class="pluginstatsview-card-wrap">
	<div>
		<img decoding="async" src="https://ps.w.org/static-site-generator/assets/icon-256x256.png?rev=3260419" alt="Static Site Generator のアイコン" class="pluginstatsview-card-icon" />
		<div class="pluginstatsview-after-icon">
			<div class="pluginstatsview-bold"><a href="https://wordpress.org/plugins/static-site-generator/" class="pluginstatsview-astyle">Static Site Generator</a></div>
			<div class="pluginstatsview-small">静的サイトを生成します。</div>
			<div class="pluginstatsview-small">作者: <a href="https://profiles.wordpress.org/katsushi-kawamori/">Katsushi Kawamori</a></div>
			<div style="clear: both;"></div>
		</div>
	</div>
	<div style="clear: both;"></div>

	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left"><a href="https://wordpress.org/plugins/static-site-generator/#reviews" title="0.0(5点満点中)" class="pluginstatsview-astyle">	<span class="pluginstatsview-stars">
					<span class="dashicons dashicons-star-empty"></span><span class="dashicons dashicons-star-empty"></span><span class="dashicons dashicons-star-empty"></span><span class="dashicons dashicons-star-empty"></span><span class="dashicons dashicons-star-empty"></span>
			</span>
	</a>(0)</span>
		<span class="pluginstatsview-card-right">最終更新: 2日 前</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">1,041ダウンロード</span>
		<span class="pluginstatsview-card-right">検証済み: 7.0</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">ダウンロード: <a href="https://downloads.wordpress.org/plugin/static-site-generator.2.04.zip" class="dashicons dashicons-download pluginstatsview-download"></a></span>
		<span class="pluginstatsview-card-right">リリース: 2025-03-23</span>
	</div>
	<div class="pluginstatsview-small pluginstatsview-card-center">
		2026-03-31 09:30 時点の統計	</div>
</div>



<p>このブログは、このプラグインとシェルスクリプトで静的サイトになっており、WordPress の本体、データベースは取り除かれていて、この記事もテスト環境側の WordPress で書かれています。静的サイトだと、ブログのコメントが出来なくなりますが、ブログのコメントは、SNS 上で記事をシェアした際に、SNS 上で付くコメントの方が多いので、必要を感じません。また、コンタクトフォームは自前のものを、php で用意し、記事中に、<code class="language-php language-html">iframe</code> タグで埋め込みました。</p>



<h3 class="wp-block-heading">要件</h3>



<ol class="wp-block-list">
<li>ローカル開発者環境で、WP-CLI がインストールされており、コマンドプロンプトでシェルスクリプト（#!/bin/sh）が使える事。</li>



<li>ローカル開発者環境と、リモートステージング環境が、SSH で繋がっている事（rsync コマンド利用の為）。</li>



<li>パーマリンクの URL の設定が、トレイリングスラッシュである事。このプラグインは、URL の末尾にパラメータが付いていたり、トレイリングスラッシュが無いと動作を辞め生成しません。</li>



<li>このプラグインはトレイリングスラッシュ以下に、ファイルを生成します。そのファイルを以下に記します。
<ul class="wp-block-list">
<li><code class="language-php language-html">index.html</code> &#8211; html のファイルです。</li>



<li><code class="language-php language-html">index.xml</code> &#8211; フィードのファイルです。</li>



<li><code class="language-php language-html">.htaccess</code> &#8211; <code class="language-php language-html">index.xml</code> と同じ場所に生成します。<code class="language-php language-html">index.xml</code> を認識させるために、<code class="language-php language-html">DirectoryIndex index.xml</code> とだけ書いてあります。Apache2 サーバーのみ使用可能なので、nginx などの他のサーバーの場合は、<code class="language-php language-html">index.xml</code> が認識するように対処してください。</li>
</ul>
</li>



<li>リダイレクトがある場合には、生成しません。ただし、そのディレクトリは作成します。</li>
</ol>



<p class="has-text-align-left">※2 はあると便利ですが、ない場合には、FTP でのアップロードで代替えできます。</p>



<h3 class="wp-block-heading">コード</h3>



<pre class="prism line-numbers"><code class="language-php language-html">#!/bin/sh

# 引数の確認
if &#91; $# -lt 1 ]; then
	echo "使い方: $0 &#91;test|stage]"
	exit 1
fi

# 引数で環境を受け取る
env="$1"

# test WordPress サイト名
wp_site_name="blog.riverforest-wp.info"

# stage サイトディレクトリ名
stage_site_dir="dodesyo:~/public_html/blog.riverforest-wp.info/"

# 環境に応じた静的サイト名と出力ディレクトリを設定
case "$env" in
	test)
		static_site_name="static.riverforest.test"
		abs_path="/home/katsushi/www/$static_site_name"
		;;
	stage)
		static_site_name="blog.riverforest-wp.info"
		abs_path="/home/katsushi/static-temp/$static_site_name"
		;;
	*)
		echo "不正な環境指定です。test、または stage を指定してください。"
		exit 1
		;;
esac

# 静的サイト名のディレクトリを存在確認し、無ければ作成
if &#91; ! -d "$abs_path" ]; then
	mkdir "$abs_path"
	echo "ディレクトリが無いので作成しました: $abs_path"
fi

# Static Site Generator による生成
wp static "$abs_path" https://$static_site_name --cb1="$wp_site_name" --ca1="$static_site_name"

# Static Site Generator による image &amp; video sitemap のみの生成 
wp static "$abs_path" https://$static_site_name --cb1="$wp_site_name" --ca1="$static_site_name" --s --file1="feed/googleimagesitemap/index.xml" --orgurl1="https://$wp_site_name/feed/googleimagesitemap" --file2="feed/googlevideossitemap/index.xml" --orgurl2="https://$wp_site_name/feed/googlevideossitemap"

# 必要ファイル類のコピー wp-includes 関連
cp -f wp-includes/js/wp-emoji-release.min.js "$abs_path"/wp-includes/js
if &#91; ! -d "$abs_path"/wp-includes/images ]; then
	mkdir "$abs_path"/wp-includes/images
fi
cp -rf wp-includes/images/media "$abs_path"/wp-includes/images

# 必要ファイル類のコピー インストールプラグイン関連
cp -rf wp-content/plugins/cookie-law-info/lite/frontend/images "$abs_path"/wp-content/plugins/cookie-law-info/lite/frontend/images
cp -rf wp-content/plugins/riverforest-function/icomoon/fonts "$abs_path"/wp-content/plugins/riverforest-function/icomoon/fonts
if &#91; ! -d "$abs_path"/wp-content/plugins/media-sitemap ]; then
	mkdir "$abs_path"/wp-content/plugins/media-sitemap
fi
cp -rf wp-content/plugins/media-sitemap/xsl "$abs_path"/wp-content/plugins/media-sitemap/xsl

# 必要ファイル類のコピー カスタム php スクリプト（コンタクトフォーム）関連
cp -rf custom "$abs_path"

# xmlrpc.php の削除
rm -f xmlrpc.php

if &#91; "$env" = "stage" ]; then
	echo "ホスト側と rsync で同期を開始します"
	rsync -avz -e ssh "$abs_path"/ "$stage_site_dir"
	echo "ホスト側と rsync で同期を終了しました"
	# ローカルホストの静的ファイルをディレクトリごと全て削除
	rm -rf $abs_path
fi

exit
</code></pre>



<h3 class="wp-block-heading">使い方＆解説</h3>



<p>シェルスクリプト名が、<code class="language-php language-html">static.sh</code> だとして、引数を指定します。引数は <code class="language-php language-html">test</code> か、<code class="language-php language-html">stage</code> のどちらかです。</p>



<ul class="wp-block-list">
<li>引数 <code class="language-php language-html">test</code>  ：ローカル環境にファイルを作成</li>



<li>引数 <code class="language-php language-html">stage</code> ：ローカル環境に一時的にファイルを作成し、リモートステージング環境にファイルをコピー。</li>
</ul>



<h4 class="wp-block-heading">動作</h4>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c12417&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c12417" class="wp-block-image size-large wp-lightbox-container"><img fetchpriority="high" loading="eager" decoding="async" width="1024" height="542" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://blog.riverforest-wp.info/wp-content/uploads/20250511/terminal-1024x542.png" alt="" class="wp-image-4108" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20250511/terminal-1024x542.png 1024w, https://blog.riverforest-wp.info/wp-content/uploads/20250511/terminal-300x159.png 300w, https://blog.riverforest-wp.info/wp-content/uploads/20250511/terminal-768x406.png 768w, https://blog.riverforest-wp.info/wp-content/uploads/20250511/terminal.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<h4 class="wp-block-heading">解説</h4>



<ul class="wp-block-list">
<li>１３行：テスト環境の WordPress のサイト名。</li>



<li>１６行：ステージング環境の WordPress のディレクトリ名、正確には、<code class="language-php language-html">.ssh</code> の、<code class="language-php language-html">config</code> ファイルに書いた、host 名(<code class="language-php language-html">dodesyo:</code>)とディレクトリ名(<code class="language-php language-html">~/public_html/blog.riverforest-wp.info/</code>)になります。</li>



<li>２１行ー２２行：テスト環境のサイト名と、サイトディレクトリ名。</li>



<li>２５行ー２６行：ステージング環境のサイト名と、サイトディレクトリ名。</li>



<li>４１行：プラグインのコマンド。<code class="language-php language-html"> --cb1</code> オプションは、変更する前（テスト環境）のサイト名、<code class="language-php language-html">--ca1</code> オプションは、変更後（静的サイト）のサイト名。</li>



<li>４４行：プラグインのコマンド。 <code class="language-php language-html">--s</code> オプションは、<code class="language-php language-html">--file</code> <code class="language-php language-html">--orgurl</code> オプションの作業だけ行うの意味。<a href="https://ja.wordpress.org/plugins/media-sitemap/" target="_blank" rel="noreferrer noopener">Media Sitemap for Google</a> というプラグインの生成するサイトマップを生成するためのもの。</li>



<li>４７行ー５１行：WordPress の本体のファイルが必要な場合にコピー。</li>



<li>５４行：<a href="https://ja.wordpress.org/plugins/cookie-law-info/" target="_blank" rel="noreferrer noopener">CookieYes</a> というプラグインで必要なものをコピー。</li>



<li>５５行：このサイトで必要な処理を自身でプラグイン化したもので必要なものをコピー。</li>



<li>５６行ー５９行：<a href="https://ja.wordpress.org/plugins/media-sitemap/" target="_blank" rel="noreferrer noopener">Media Sitemap for Google</a> というプラグインで必要なものをコピー。</li>



<li>６２行：自身で php で作成した、コンタクトフォーム一式をコピー。</li>



<li>６５行：プラグインが、<code class="language-php language-html">xmlrpc.php</code> をコピーしてきてしまうので、削除。</li>



<li>６７行以降：rsync で、ステージング環境に出力するためのもの。FTP 等でコピーするなら不要。</li>
</ul>



<h3 class="wp-block-heading">この方法で静的化したサイト</h3>



<p>以下に、この方法で静的化したこのサイト以外の自分のサイトを示します。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<style>
.simpleblogcard_img_block1b4ad39094b4660d0415cc91daa3ab74 {
  float: right;
  padding: 10px;
}
.simpleblogcard_border1b4ad39094b4660d0415cc91daa3ab74 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title1b4ad39094b4660d0415cc91daa3ab74 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description1b4ad39094b4660d0415cc91daa3ab74 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://fbm.riverforest-wp.info/ja/fixed-bottom-menu-%e3%83%a9%e3%82%a4%e3%83%96/ target="_blank" rel="noopener">
			<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border1b4ad39094b4660d0415cc91daa3ab74">
			fbm.riverforest-wp.info			<div class="simpleblogcard_title1b4ad39094b4660d0415cc91daa3ab74">
				Fixed Bottom Menu ライブ – WordPress Plugin Fixed Bottom Menu Live Site			</div>
							<div class="simpleblogcard_description1b4ad39094b4660d0415cc91daa3ab74">
					当サイトでは、プラグイン「Fixed Bottom Menu」のフィルターによるカスタマイズ例を紹介しています。「Twenty Twenty-Four」テーマを使用しています。 こ&#8230;				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<style>
.simpleblogcard_img_block350b52dc01b03404a0fc7c98f0c80da5 {
  float: right;
  padding: 10px;
}
.simpleblogcard_border350b52dc01b03404a0fc7c98f0c80da5 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title350b52dc01b03404a0fc7c98f0c80da5 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description350b52dc01b03404a0fc7c98f0c80da5 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://riverforest-wp.info/ja/plugins-ja/ target="_blank" rel="noopener">
			<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border350b52dc01b03404a0fc7c98f0c80da5">
			riverforest-wp.info			<div class="simpleblogcard_title350b52dc01b03404a0fc7c98f0c80da5">
				Riverforest Plugins – Introducing of WordPress plugins made by Katsushi Kawamori. And sales of add-ons.			</div>
							<div class="simpleblogcard_description350b52dc01b03404a0fc7c98f0c80da5">
					私は以下のプラグインを作成し、WordPress に貢献しています。				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<style>
.simpleblogcard_img_block32a583e07387a0fbe245431af84b86fe {
  float: right;
  padding: 10px;
}
.simpleblogcard_border32a583e07387a0fbe245431af84b86fe {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title32a583e07387a0fbe245431af84b86fe {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description32a583e07387a0fbe245431af84b86fe {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://compe-scoring.com/ja/compe-scoring-ja/ target="_blank" rel="noopener">
			<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border32a583e07387a0fbe245431af84b86fe">
			compe-scoring.com			<div class="simpleblogcard_title32a583e07387a0fbe245431af84b86fe">
				Competition Scoring System – Competition Scoring System			</div>
							<div class="simpleblogcard_description32a583e07387a0fbe245431af84b86fe">
					このサービスの特徴 このサービスは、競技会・コンクール・コンテストの採点システムです。 競技の初めから終わりまで、自動収集します。PCの前にいる必要はありません。競技が終わった後に&#8230;				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<style>
.simpleblogcard_img_blockb4378c3add01f8892d7d9aba5a1d2e70 {
  float: right;
  padding: 10px;
}
.simpleblogcard_borderb4378c3add01f8892d7d9aba5a1d2e70 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_titleb4378c3add01f8892d7d9aba5a1d2e70 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_descriptionb4378c3add01f8892d7d9aba5a1d2e70 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://bdc-scoring.com/ja/ballroom-dance-competition-scoring-system-ja/ target="_blank" rel="noopener">
			<div class="simpleblogcard_inner">
		<div class="simpleblogcard_borderb4378c3add01f8892d7d9aba5a1d2e70">
			bdc-scoring.com			<div class="simpleblogcard_titleb4378c3add01f8892d7d9aba5a1d2e70">
				Ballroom dance competition Scoring System			</div>
							<div class="simpleblogcard_descriptionb4378c3add01f8892d7d9aba5a1d2e70">
					このサービスの特徴 このサービスは、ボールルームダンス競技会の採点システムです。兄弟版サービスの競技会採点システムは以下からお入りください。 競技会採点システム ここで記されるボー&#8230;				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<style>
.simpleblogcard_img_block2a18a88e79a8cd1f310f501bca87a56d {
  float: right;
  padding: 10px;
}
.simpleblogcard_border2a18a88e79a8cd1f310f501bca87a56d {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title2a18a88e79a8cd1f310f501bca87a56d {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description2a18a88e79a8cd1f310f501bca87a56d {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://pt-syncer.riverforest-wp.info/>
				<figure class="simpleblogcard_img_block2a18a88e79a8cd1f310f501bca87a56d">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 100px;" src="https://pt-syncer.riverforest-wp.info/wp-content/uploads/2025/10/icon-300x300.png" alt="PT-Syncer – パーソナルトレーニング向け管理アプリ。QRでチケット管理、Googleカレンダーで予定確認。" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border2a18a88e79a8cd1f310f501bca87a56d">
			pt-syncer.riverforest-wp.info			<div class="simpleblogcard_title2a18a88e79a8cd1f310f501bca87a56d">
				PT-Syncer – パーソナルトレーニング向け管理アプリ。QRでチケット管理、Googleカレンダーで予定確認。			</div>
							<div class="simpleblogcard_description2a18a88e79a8cd1f310f501bca87a56d">
					PT-Syncer / PT-Syncer Mini ** PT-Syncer（Personal Training Sync）** パーソナルトレーニングや個人レッスン向けのチケッ&#8230;				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"></div>
</div>



<h3 class="wp-block-heading">終わりに</h3>



<p>静的サイトにしてみて、表示が早くなったのを実感します。また、セキュリティ的な圧力から解放されます。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>プラグインディレクトリでの Live Preview の有効化</title>
		<link>https://blog.riverforest-wp.info/live-preview/</link>
		
		<dc:creator><![CDATA[Katsushi Kawamori]]></dc:creator>
		<pubDate>Tue, 18 Jun 2024 00:59:34 +0000</pubDate>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Live Preview]]></category>
		<category><![CDATA[プラグイン]]></category>
		<guid isPermaLink="false">https://blog.riverforest-wp.info/?p=3854</guid>

					<description><![CDATA[はじめに ブラウザだけで動作する WordPress 「Playground」が、昨年辺りから利用できるようになりました。それを利用して、公式プラグインディレクトリや公式テーマディレクトリで「Live Preview」が [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">はじめに</h3>



<p>ブラウザだけで動作する WordPress 「Playground」が、昨年辺りから利用できるようになりました。それを利用して、公式プラグインディレクトリや公式テーマディレクトリで「Live Preview」が可能になっています。今回は、公式プラグインディレクトリで「Live Preview」を可能にするためにプラグイン作者向けに書きました。</p>



<style>
.simpleblogcard_img_blocka2aee9984d34178e3932f2bce2ecbc94 {
  float: right;
  padding: 10px;
}
.simpleblogcard_bordera2aee9984d34178e3932f2bce2ecbc94 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_titlea2aee9984d34178e3932f2bce2ecbc94 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_descriptiona2aee9984d34178e3932f2bce2ecbc94 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://wordpress.org/playground/ target="_blank" rel="noopener">
			<div class="simpleblogcard_inner">
		<div class="simpleblogcard_bordera2aee9984d34178e3932f2bce2ecbc94">
			wordpress.org			<div class="simpleblogcard_titlea2aee9984d34178e3932f2bce2ecbc94">
				WordPress Playground			</div>
							<div class="simpleblogcard_descriptiona2aee9984d34178e3932f2bce2ecbc94">
									</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>



<h3 class="wp-block-heading">プラグインディレクトリにログイン</h3>



<p>ログインして、「Advanced View」に移動し、最下部に移動すると、「Toggle Live Preview」という欄があります。<code class="language-php language-html">blueprint.json</code> というファイルがコミットされていないと、「Live Preview」 を有効化するボタンが表示されていません。</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c1403e&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c1403e" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="314" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3866" src="https://blog.riverforest-wp.info/wp-content/uploads/20240618/Default-Advanced-View-1024x314.png" alt="" class="wp-image-3866" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20240618/Default-Advanced-View-1024x314.png 1024w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/Default-Advanced-View-300x92.png 300w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/Default-Advanced-View-768x236.png 768w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/Default-Advanced-View.png 1274w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c145d0&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c145d0" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" width="805" height="489" data-id="3871" src="https://blog.riverforest-wp.info/wp-content/uploads/20240618/toggle-live-preview1.png" alt="" class="wp-image-3871" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20240618/toggle-live-preview1.png 805w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/toggle-live-preview1-300x182.png 300w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/toggle-live-preview1-768x467.png 768w" sizes="auto, (max-width: 805px) 100vw, 805px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>
</figure>



<h3 class="wp-block-heading">設定ファイルの編集とコミット</h3>



<p>例として、自分のプラグインの <a href="https://ja.wordpress.org/plugins/fixed-bottom-menu/" target="_blank" rel="noreferrer noopener"><strong>Fixed Bottom Menu</strong></a> の「<strong>blueprint.json</strong>」を以下に記します。</p>



<pre class="prism line-numbers"><code class="language-php language-html">{
    "landingPage": "\/wp-admin\/admin.php?page=fixedbottommenu",
    "preferredVersions": {
        "php": "8.0",
        "wp": "6.6"
    },
	"login": true,
	"plugins": &#91;"fixed-bottom-menu"]
}</code></pre>



<p>プラグインをインストール、有効化し、プラグインの設定画面を表示する設定になっています。詳しくは、以下をご覧ください。</p>



<style>
.simpleblogcard_img_blockbc072b722ca8a823b381623c4f7ee449 {
  float: right;
  padding: 10px;
}
.simpleblogcard_borderbc072b722ca8a823b381623c4f7ee449 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_titlebc072b722ca8a823b381623c4f7ee449 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_descriptionbc072b722ca8a823b381623c4f7ee449 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://developer.wordpress.org/plugins/wordpress-org/previews-and-blueprints/ target="_blank" rel="noopener">
				<figure class="simpleblogcard_img_blockbc072b722ca8a823b381623c4f7ee449">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 52px;" src="https://developer.wordpress.org/wp-content/themes/wporg-developer-2023/images/opengraph-image.png" alt="Previews and Blueprints – Plugin Handbook | Developer.WordPress.org" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_borderbc072b722ca8a823b381623c4f7ee449">
			developer.wordpress.org			<div class="simpleblogcard_titlebc072b722ca8a823b381623c4f7ee449">
				Previews and Blueprints – Plugin Handbook | Developer.WordPress.org			</div>
							<div class="simpleblogcard_descriptionbc072b722ca8a823b381623c4f7ee449">
					If you haven’t noticed it yet, the WordPress Playground is an amazing feature that lets an&#8230;				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>



<p>また、「<strong>blueprint.json</strong>」の設定例が以下から参照できます。</p>



<style>
.simpleblogcard_img_block53872a6d6c04a75fc68cc085187e1a69 {
  float: right;
  padding: 10px;
}
.simpleblogcard_border53872a6d6c04a75fc68cc085187e1a69 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title53872a6d6c04a75fc68cc085187e1a69 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description53872a6d6c04a75fc68cc085187e1a69 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://github.com/WordPress/blueprints/tree/trunk/blueprints>
				<figure class="simpleblogcard_img_block53872a6d6c04a75fc68cc085187e1a69">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 50px;" src="https://opengraph.githubassets.com/1a99c75777ecb69d9a0269d49c8efc10946b325b74add4b6c62a4005e299395b/WordPress/blueprints" alt="blueprints/blueprints at trunk · WordPress/blueprints · GitHub" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border53872a6d6c04a75fc68cc085187e1a69">
			github.com			<div class="simpleblogcard_title53872a6d6c04a75fc68cc085187e1a69">
				blueprints/blueprints at trunk · WordPress/blueprints · GitHub			</div>
							<div class="simpleblogcard_description53872a6d6c04a75fc68cc085187e1a69">
					Blueprints gallery and examples. Contribute to WordPress/blueprints development by creatin&#8230;				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>



<p>その他に一番使う設定として、管理画面を日本語で読み込む例を以下に示します。</p>



<pre class="prism line-numbers"><code class="language-php language-html">{
    "landingPage": "\/wp-admin\/",
　　"login": true,
    "steps": &#91;
		{
			"step": "setSiteLanguage",
			"language": "ja"
		}
    ]
}</code></pre>



<p>「<strong>blueprint.json</strong>」の編集を終えたら、プラグインディレクトリにコミットします。コミット場所は、<code class="language-php language-html">/assets/blueprints/blueprint.json</code> です。</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c15071&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c15071" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" width="635" height="302" data-id="3867" src="https://blog.riverforest-wp.info/wp-content/uploads/20240618/folder1.png" alt="" class="wp-image-3867" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20240618/folder1.png 635w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/folder1-300x143.png 300w" sizes="auto, (max-width: 635px) 100vw, 635px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c156a1&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c156a1" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" width="649" height="259" data-id="3868" src="https://blog.riverforest-wp.info/wp-content/uploads/20240618/folder2.png" alt="" class="wp-image-3868" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20240618/folder2.png 649w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/folder2-300x120.png 300w" sizes="auto, (max-width: 649px) 100vw, 649px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>
</figure>



<h3 class="wp-block-heading">プラグインディレクトリでの操作</h3>



<p>コミット後に、ログインして、「Download」の横に「Test Preview」ボタンが出現します。ボタンを押すとテストできます。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c15d78&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c15d78" class="wp-block-image aligncenter size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="282" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://blog.riverforest-wp.info/wp-content/uploads/20240618/test-preview-1024x282.png" alt="" class="wp-image-3870" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20240618/test-preview-1024x282.png 1024w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/test-preview-300x83.png 300w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/test-preview-768x212.png 768w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/test-preview.png 1336w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>テストして問題が無ければ、「Advanced View」に移動し、最下部に移動し、「Toggle Live Preview」のボタンを押すと、「Live Preview」が有効化されます。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c163fd&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c163fd" class="wp-block-image aligncenter size-full wp-lightbox-container"><img loading="lazy" decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" width="804" height="566" src="https://blog.riverforest-wp.info/wp-content/uploads/20240618/toggle-live-preview2.png" alt="" class="wp-image-3872" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20240618/toggle-live-preview2.png 804w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/toggle-live-preview2-300x211.png 300w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/toggle-live-preview2-768x541.png 768w" sizes="auto, (max-width: 804px) 100vw, 804px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c1696b&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c1696b" class="wp-block-image aligncenter size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="343" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://blog.riverforest-wp.info/wp-content/uploads/20240618/live-preview-1024x343.png" alt="" class="wp-image-3869" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20240618/live-preview-1024x343.png 1024w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/live-preview-300x101.png 300w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/live-preview-768x258.png 768w, https://blog.riverforest-wp.info/wp-content/uploads/20240618/live-preview.png 1264w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<h3 class="wp-block-heading">実際の動作</h3>



<figure class="wp-block-video aligncenter"><video height="720" style="aspect-ratio: 1280 / 720;" width="1280" controls muted src="https://blog.riverforest-wp.info/wp-content/uploads/20240618/live-preview.mp4"></video></figure>



<h3 class="wp-block-heading">おわりに</h3>



<p>「Live Preview」は、プラグインの更新とは独立してオン・オフできるので、用途や更新内容に合わせて適宜オン・オフできるのが便利ですね。</p>
]]></content:encoded>
					
		
		<enclosure url="https://blog.riverforest-wp.info/wp-content/uploads/20240618/live-preview.mp4" length="7123488" type="video/mp4" />

			</item>
		<item>
		<title>投稿編集リンクを管理バーに表示するプラグイン</title>
		<link>https://blog.riverforest-wp.info/edit-recent-edited-posts/</link>
		
		<dc:creator><![CDATA[Katsushi Kawamori]]></dc:creator>
		<pubDate>Mon, 03 Jun 2024 11:42:37 +0000</pubDate>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[最近の投稿]]></category>
		<category><![CDATA[管理バー]]></category>
		<category><![CDATA[編集]]></category>
		<guid isPermaLink="false">https://blog.riverforest-wp.info/?p=3842</guid>

					<description><![CDATA[はじめに このブログ内で書いてる記事で時々加筆するものがあります。その際に投稿画面で検索してから投稿を編集しますが、何回かに分けて加筆する際に同じ事（投稿画面で検索してから投稿を編集）を繰り返すのが面倒なので、ログインし [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">はじめに</h3>



<p>このブログ内で書いてる記事で時々加筆するものがあります。その際に<strong>投稿画面で検索してから投稿を編集</strong>しますが、何回かに分けて加筆する際に同じ事（<strong>投稿画面で検索してから投稿を編集</strong>）を繰り返すのが面倒なので、ログインしてすぐに管理バーからダイレクトに編集（<strong>直近の投稿</strong>）できるプラグインを作成しました。ありそうで無かった？プラグインだと思います。</p>



<div class="pluginstatsview-card-wrap">
	<div>
		<img decoding="async" src="https://ps.w.org/edit-recent-edited-posts/assets/icon-256x256.png?rev=3096696" alt="Edit Recent Edited Posts のアイコン" class="pluginstatsview-card-icon" />
		<div class="pluginstatsview-after-icon">
			<div class="pluginstatsview-bold"><a href="https://wordpress.org/plugins/edit-recent-edited-posts/" class="pluginstatsview-astyle">Edit Recent Edited Posts</a></div>
			<div class="pluginstatsview-small">管理バーに最近編集した投稿へのリンクが表示され、編集できるようになります。</div>
			<div class="pluginstatsview-small">作者: <a href="https://profiles.wordpress.org/katsushi-kawamori/">Katsushi Kawamori</a></div>
			<div style="clear: both;"></div>
		</div>
	</div>
	<div style="clear: both;"></div>

	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left"><a href="https://wordpress.org/plugins/edit-recent-edited-posts/#reviews" title="0.0(5点満点中)" class="pluginstatsview-astyle">	<span class="pluginstatsview-stars">
					<span class="dashicons dashicons-star-empty"></span><span class="dashicons dashicons-star-empty"></span><span class="dashicons dashicons-star-empty"></span><span class="dashicons dashicons-star-empty"></span><span class="dashicons dashicons-star-empty"></span>
			</span>
	</a>(0)</span>
		<span class="pluginstatsview-card-right">最終更新: 2日 前</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">1,142ダウンロード</span>
		<span class="pluginstatsview-card-right">検証済み: 7.0</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">ダウンロード: <a href="https://downloads.wordpress.org/plugin/edit-recent-edited-posts.1.01.zip" class="dashicons dashicons-download pluginstatsview-download"></a></span>
		<span class="pluginstatsview-card-right">リリース: 2024-06-03</span>
	</div>
	<div class="pluginstatsview-small pluginstatsview-card-center">
		2026-03-31 09:30 時点の統計	</div>
</div>



<h3 class="wp-block-heading">動作</h3>



<figure class="wp-block-video"><video controls muted src="https://blog.riverforest-wp.info/wp-content/uploads/20240526/edit-recent-edited-posts.mp4"></video></figure>



<h3 class="wp-block-heading">仕様</h3>



<ul class="wp-block-list">
<li>過去3日以内に編集された5つの投稿を表示します。</li>



<li>投稿、固定ページ、メディア、カスタム投稿に対応。</li>



<li>以下のフィルターフックを使って様々な設定を変更できます。</li>
</ul>



<pre class="prism line-numbers"><code class="language-php language-html">/** ==================================================
 * Filter for capability.
 *
 */
add_filter( 'edit_recent_edited_posts_user_can',
	function() {
		return 'edit_published_posts';
	},
	10,
	1
);
~~~
~~~
/** ==================================================
 * Filter for period to be displayed.
 *
 */
add_filter(
	'edit_recent_edited_posts_days',
	function() {
		return 30;
	},
	10,
	1
);
~~~
~~~
/** ==================================================
 * Filter for user ID of the post to be displayed.
 *
 */
add_filter(
	'edit_recent_edited_posts_author_ids',
	function() {
		$user_ids = array();
		$user_ids&#91;] = get_current_user_id();
		return $user_ids;
	},
	10,
	1
);
~~~
~~~
/** ==================================================
 * Filter for displayed results.
 *
 */
add_filter(
	'edit_recent_edited_posts_items',
	function() {
		return 10;
	},
	10,
	1
);
~~~
~~~
/** ==================================================
 * Filter for display order.
 *
 */
add_filter(
	'edit_recent_edited_posts_order',
	function() {
		return 'ASC';
	},
	10,
	1
);
~~~
~~~
/** ==================================================
 * Filter for type of posting date and time.
 *
 */
add_filter(
	'edit_recent_edited_posts_orderby',
	function() {
		return 'post_date';
	},
	10,
	1
);
</code></pre>
]]></content:encoded>
					
		
		<enclosure url="https://blog.riverforest-wp.info/wp-content/uploads/20240526/edit-recent-edited-posts.mp4" length="20576723" type="video/mp4" />

			</item>
		<item>
		<title>コンタクト</title>
		<link>https://blog.riverforest-wp.info/contact/</link>
		
		<dc:creator><![CDATA[Katsushi Kawamori]]></dc:creator>
		<pubDate>Sun, 26 May 2024 09:56:21 +0000</pubDate>
				<guid isPermaLink="false">https://blog.riverforest-wp.info/?page_id=3839</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>公式プラグインディレクトリに登録されているプラグインへの問い合わせには一切応じていません！問い合わせはプラグインのサポートフォーラムへお願いいたします。ただし、サポートフォーラムへの問い合わせに対しても返答するとは限りません。WordPress とそのプラグインのサポートフォーラムは、マネタイズありきの企業やスマホアプリのサポートでなく、相互扶助に基づくものです。</p>
<style>
.simpleblogcard_img_block3e043887805102c9d5f2c34a8258b433 {
  float: right;
  padding: 10px;
}
.simpleblogcard_border3e043887805102c9d5f2c34a8258b433 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title3e043887805102c9d5f2c34a8258b433 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description3e043887805102c9d5f2c34a8258b433 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://ja.wordpress.org/support/article/guidelines/>
				<figure class="simpleblogcard_img_block3e043887805102c9d5f2c34a8258b433">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 56px;" src="https://s.w.org/images/home/wordpress-default-ogimage.png" alt="フォーラムガイドライン – サポートフォーラム – WordPress.org 日本語" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border3e043887805102c9d5f2c34a8258b433">
			ja.wordpress.org			<div class="simpleblogcard_title3e043887805102c9d5f2c34a8258b433">
				フォーラムガイドライン – サポートフォーラム – WordPress.org 日本語			</div>
							<div class="simpleblogcard_description3e043887805102c9d5f2c34a8258b433">
					WordPress.org サポートフォーラムへようこそ ! <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f603.png" alt="😃" class="wp-smiley" style="height: 1em; max-height: 1em;" /> このフォーラムはボランティアによるリソースで…				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>
</blockquote>



<iframe loading="lazy" src="https://blog.riverforest-wp.info/custom/contact.php?lang=ja" title="コンタクトフォーム" width="100%" height="650"></iframe>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordCamp Kansai 2024 に参加しました</title>
		<link>https://blog.riverforest-wp.info/wordcamp-kansai-2024/</link>
		
		<dc:creator><![CDATA[Katsushi Kawamori]]></dc:creator>
		<pubDate>Mon, 26 Feb 2024 00:23:28 +0000</pubDate>
				<category><![CDATA[WordCamp Kansai 2024]]></category>
		<category><![CDATA[WordCamp]]></category>
		<guid isPermaLink="false">https://blog.riverforest-wp.info/?p=3695</guid>

					<description><![CDATA[はじめに ２０２４年２月２４日（土）に神戸の三宮コンベンションセンターで開催された、WordCamp Kansai 2024 に参加してきました。WordCamp のオフライン参加は前回の WordCamp Tokyo  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">はじめに</h2>



<p>２０２４年２月２４日（土）に神戸の三宮コンベンションセンターで開催された、<strong>WordCamp Kansai 2024</strong> に参加してきました。WordCamp のオフライン参加は前回の <strong>WordCamp Tokyo 2019</strong> 以来の５年ぶりです。今回は、<strong><a href="https://kansai.wordcamp.org/2024/sponsor/riverforest-plugins/">フードスポンサー</a></strong>としての参加です。</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<style>
.simpleblogcard_img_blockbdb2fb1bab795e87a10501949e807b13 {
  float: right;
  padding: 10px;
}
.simpleblogcard_borderbdb2fb1bab795e87a10501949e807b13 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_titlebdb2fb1bab795e87a10501949e807b13 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_descriptionbdb2fb1bab795e87a10501949e807b13 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://kansai.wordcamp.org/2024/>
			<div class="simpleblogcard_inner">
		<div class="simpleblogcard_borderbdb2fb1bab795e87a10501949e807b13">
			kansai.wordcamp.org			<div class="simpleblogcard_titlebdb2fb1bab795e87a10501949e807b13">
				WordCamp Kansai 2024 – “Set Sail – 共に学び・共有し、新しい旅に備えよう”			</div>
							<div class="simpleblogcard_descriptionbdb2fb1bab795e87a10501949e807b13">
					WordCamp Kansai 2024では、「Set Sail – 共に学び・共有し、新しい旅に備えよう」をテーマに、これからのWordPressとWordPressを利用したW&#8230;				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<style>
.simpleblogcard_img_block58694aecef0162437dd02995686b18e5 {
  float: right;
  padding: 10px;
}
.simpleblogcard_border58694aecef0162437dd02995686b18e5 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title58694aecef0162437dd02995686b18e5 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description58694aecef0162437dd02995686b18e5 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://blog.riverforest-wp.info/wordcamp-tokyo-2019-%e3%81%a7%e3%82%b9%e3%83%9d%e3%83%b3%e3%82%b5%e3%83%bc%e3%81%a8%e3%81%97%e3%81%a6%e3%83%96%e3%83%bc%e3%82%b9%e5%87%ba%e5%b1%95%e3%81%97%e3%81%be%e3%81%97%e3%81%9f/>
				<figure class="simpleblogcard_img_block58694aecef0162437dd02995686b18e5">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 52px;" src="https://blog.riverforest-wp.info/wp-content/uploads/20190913/ogp_sponsor-300x158.jpg" alt="WordCamp Tokyo 2019 でスポンサーとしてブース出展しました – WordPress Memo" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border58694aecef0162437dd02995686b18e5">
			blog.riverforest-wp.info			<div class="simpleblogcard_title58694aecef0162437dd02995686b18e5">
				WordCamp Tokyo 2019 でスポンサーとしてブース出展しました – WordPress Memo			</div>
							<div class="simpleblogcard_description58694aecef0162437dd02995686b18e5">
					はじめに 昨年１１月に「ボールルームダンス競技会採点システム」、今年４月に、「競技会採点システム」を開発しましたが、未だに契約者が一団体にとどまっています。宣伝のために、最初に W&#8230;				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>
</div>
</div>



<h2 class="wp-block-heading">前日、当日開場前</h2>



<p>前日は、ひと仕事した後に、新幹線で移動し１８時過ぎにホテルにチェックインしました。その後、予約していた神戸ステーキレストランで神戸牛をいただきました。</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c67c5d&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c67c5d" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3702" src="https://blog.riverforest-wp.info/wp-content/uploads/20240226/IMG_1146-768x1024.jpg" alt="" class="wp-image-3702"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c68b21&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c68b21" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3709" src="https://blog.riverforest-wp.info/wp-content/uploads/20240226/IMG_1149-768x1024.jpg" alt="" class="wp-image-3709"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c69b30&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c69b30" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3710" src="https://blog.riverforest-wp.info/wp-content/uploads/20240226/IMG_1156-768x1024.jpg" alt="" class="wp-image-3710"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>
</figure>



<p>当日は、開場の１１時まで間があいたので、付近を徒歩で散策しました。</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex">
<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c6ad8f&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c6ad8f" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3703" src="https://blog.riverforest-wp.info/wp-content/uploads/20240226/IMG_1161-768x1024.jpg" alt="" class="wp-image-3703"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c6bda7&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c6bda7" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3704" src="https://blog.riverforest-wp.info/wp-content/uploads/20240226/IMG_1162-768x1024.jpg" alt="" class="wp-image-3704"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c6cde8&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c6cde8" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3705" src="https://blog.riverforest-wp.info/wp-content/uploads/20240226/IMG_1163-768x1024.jpg" alt="" class="wp-image-3705"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c6dc81&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c6dc81" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3706" src="https://blog.riverforest-wp.info/wp-content/uploads/20240226/IMG_1165-768x1024.jpg" alt="" class="wp-image-3706"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c6e990&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c6e990" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3707" src="https://blog.riverforest-wp.info/wp-content/uploads/20240226/IMG_1167-768x1024.jpg" alt="" class="wp-image-3707"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c6f507&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c6f507" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3708" src="https://blog.riverforest-wp.info/wp-content/uploads/20240226/IMG_1169-768x1024.jpg" alt="" class="wp-image-3708"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>
</figure>



<h2 class="wp-block-heading">開会式</h2>



<p>実行委員長の岡本秀高さんの WordPress や WordCamp のそれまでの関わり方やコミュニティについてわかりやすく話していただいた後に、WordCamp らしい自己紹介タイム！左隣の方と後ろの２方と前の方、計４名とそれぞれお話ししました。そのうち２名の方は、すでに SNS で繋がっていた方ですがオフラインでの会話は SNS では出来ない事が出来るのでオフラインでの付き合いは大切ですね。</p>



<h2 class="wp-block-heading">スポンサーエリア</h2>



<p>自分はフードスポンサーですが、フードスポンサーはブース出展はありませんでした。スポンサーエリアは広く、いろいろな方と交流しました。</p>



<h2 class="wp-block-heading">お茶会スペース純喫茶わぷ～</h2>



<p>14時～14時45分、こちらにいました。当初の計画では、こちらで PC 出して、今取り組んでいるプラグインのサジェストを受けて、それに関わる人たちと交流しようと思っていたのですが、まったくそのような雰囲気では無く、お茶とお茶菓子をいただき楽しく歓談しました。</p>



<p>今回の WordCamp では、お互いに PC 出して何かをするというような方は少なく、皆さん、会話にいそしんでいましたね！</p>



<h2 class="wp-block-heading">セッション</h2>



<p>幾つかのセッションを拝見しましたが、一番自分にうけたセッションが、「<a href="https://kansai.wordcamp.org/2024/session/a-story-about-how-i-created-a-block-theme-in-my-second-year-of-web-production/"><strong>Web制作2年目の私がブロックテーマを作成してみた話</strong></a>」でした。実は、同時間に、他会場で、「<strong><a href="https://kansai.wordcamp.org/2024/session/understand-the-cache-involved-in-a-wordpress-site/">WordPressサイトに関わるキャッシュを理解する</a></strong>」があって、当初は「キャッシュ」の方を拝見する予定でしたが、少し眠くなっていたのと「キャッシュ」の会場が狭く椅子だけなので辛そうだと思い、「ブロックテーマ」の方が広い会場でテーブルにもたれる事ができるという安直な理由で「ブロックテーマ」の方を拝見しました。しかし、見ている内に、引き込まれてしまい眠気が吹き飛びました。WordPress のデフォルト新テーマ <strong><a href="https://wordpress.org/themes/twentytwentyfour/">Twenty Twenty-Four</a></strong> は、凄いというのは何となくわかっていましたが、まさかここまでワープロ感覚でイージーにノーコードでサイト制作出来るのかという感動がありました。フルサイト編集がここまで進化すると、コーディングを知らないセンスのあるデザイナーが参入して、ますます WordPress が多様化し活発化するのではないかと思います。ちなみにこのブログのテーマは、<strong><a href="https://ja.wordpress.org/themes/twentytwentythree/">Twenty Twenty-Three</a></strong> です。</p>



<p>もう一つは、「<a href="https://kansai.wordcamp.org/2024/session/how-i-took-over-the-maintenance-of-mw-wp-form/"><strong>MW WP Form のメンテナンスを引き継いでもらった話</strong></a>」です。自分は<a href="https://profiles.wordpress.org/katsushi-kawamori/"><strong>プラグイン作者</strong></a>で、昨年２０個くらいのプラグインをクローズしましたが、クローズしないで、メンテナンスを引き継いでもらえたというのは、まさにオープンソースですね。また、<strong><a href="https://2inc.org/">キタジマ</a></strong>さんのコミュニティ内での密な活動と人柄のおかげでしょう。</p>



<h2 class="wp-block-heading">終わりに</h2>



<p>少し疲れてしまったので、閉会式の始まる直前に、帰路につきました。もっといろいろな方と交流したかったのですが、それはまたの機会に。</p>



<p>実行委員、ボランティアの皆様、ありがとうございました。そしてお疲れ様でした。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress での CSV 出力について</title>
		<link>https://blog.riverforest-wp.info/wp-csv-export-function/</link>
		
		<dc:creator><![CDATA[Katsushi Kawamori]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 12:44:23 +0000</pubDate>
				<category><![CDATA[Function]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[SplFileObject]]></category>
		<category><![CDATA[WP_Filesystem]]></category>
		<guid isPermaLink="false">https://blog.riverforest-wp.info/?p=3619</guid>

					<description><![CDATA[はじめに 最近、Plugin Check というプラグインチームが作成したプラグインで自分のプラグインをチェックしているのですが、以下の様な警告が出てきます。 「json_encode を、wp_json_encode  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">はじめに</h3>



<p>最近、<strong>Plugin Check</strong> というプラグインチームが作成したプラグインで自分のプラグインをチェックしているのですが、以下の様な警告が出てきます。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c71d0b&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c71d0b" class="wp-block-image aligncenter size-full wp-lightbox-container"><img loading="lazy" decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" width="860" height="758" src="https://blog.riverforest-wp.info/wp-content/uploads/20231220/plugincheck_bad.png" alt="" class="wp-image-3629" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20231220/plugincheck_bad.png 860w, https://blog.riverforest-wp.info/wp-content/uploads/20231220/plugincheck_bad-300x264.png 300w, https://blog.riverforest-wp.info/wp-content/uploads/20231220/plugincheck_bad-768x677.png 768w" sizes="auto, (max-width: 860px) 100vw, 860px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>「<a href="https://www.php.net/manual/ja/function.json-encode.php">json_encode</a> を、<a href="https://developer.wordpress.org/reference/functions/wp_json_encode/">wp_json_encode</a> にしなさい」というのと、「<a href="https://www.php.net/manual/ja/function.fopen.php">fopen</a>、<a href="https://www.php.net/manual/ja/function.fclose.php">fclose</a>、<a href="https://www.php.net/manual/ja/function.fputcsv.php">fputcsv</a> などの php のファイルシステムは使用せずに、<a href="https://developer.wordpress.org/reference/functions/wp_filesystem/">WP_Filesystem</a> を使用しなさい」というのが主です。</p>



<div class="pluginstatsview-card-wrap">
	<div>
		<img decoding="async" src="https://ps.w.org/plugin-check/assets/icon.svg?rev=3166100" alt="Plugin Check (PCP) のアイコン" class="pluginstatsview-card-icon" />
		<div class="pluginstatsview-after-icon">
			<div class="pluginstatsview-bold"><a href="https://github.com/WordPress/plugin-check" class="pluginstatsview-astyle">Plugin Check (PCP)</a></div>
			<div class="pluginstatsview-small">Plugin Check は WordPress.org のツールで、プラグインがディレクトリの要件を満たし、様々なベストプラク&#8230;</div>
			<div class="pluginstatsview-small">作者: <a href="https://profiles.wordpress.org/wordpressdotorg/">WordPress.org</a></div>
			<div style="clear: both;"></div>
		</div>
	</div>
	<div style="clear: both;"></div>

	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left"><a href="https://github.com/WordPress/plugin-check#reviews" title="4.4(5点満点中)" class="pluginstatsview-astyle">	<span class="pluginstatsview-stars">
					<span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-half"></span>
			</span>
	</a>(32)</span>
		<span class="pluginstatsview-card-right">最終更新: 2週間 前</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">8,000以上サイトで有効化中</span>
		<span class="pluginstatsview-card-right">検証済み: 7.0</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">ダウンロード: <a href="https://downloads.wordpress.org/plugin/plugin-check.1.9.0.zip" class="dashicons dashicons-download pluginstatsview-download"></a></span>
		<span class="pluginstatsview-card-right">リリース: 2011-09-04</span>
	</div>
	<div class="pluginstatsview-small pluginstatsview-card-center">
		2026-03-31 09:30 時点の統計	</div>
</div>



<p>WP_Filesystem に関しては、テーマなどで、<a href="https://www.php.net/manual/ja/function.file-get-contents.php">file_get_contents</a>、<a href="https://www.php.net/manual/ja/function.file-put-contents.php">file_put_contents</a> などの代わりに使用するように推奨していたようですが、プラグインに関しても推奨するようになってきたのかという感じです。しかし、必ずしもすべてこの通りにしなければならないというものでもないようで、その辺りの事が、<a href="https://ja.wordpress.org/plugins/plugin-check/#why%20does%20it%20flag%20something%20as%20bad%3F">FAQ</a> に書かれています。実際、上記の非推奨のものを使用していてトラブルになったおぼえはありません。</p>



<p>自分の場合には、CSV 出力関連ですが、WP_Filesystem には、fputcsv の代替えのものがありません。file_put_contents の代替えのものはあるのですがコードが煩雑になり遠回りになってしまいます。そこで、<a href="https://www.php.net/manual/ja/class.splfileobject.php">SplFileObject クラス</a> を使用してみたところ、<strong>Plugin Check</strong> に怒られなく？なりました。</p>



<h3 class="wp-block-heading">コード</h3>



<p>$csvs は、CSV にするための配列とします。$csv_file は、フルパスを含むファイル名です。フィルターに関しては無くても動作しますが、Windows の Excel で直接開きたい場合には、必要です。</p>



<p>fputcsv を用いたコード</p>



<pre class="prism line-numbers"><code class="language-php language-html">$f = fopen( $csv_file, 'w' );
stream_filter_prepend( $f, 'convert.iconv.utf-8/cp932//TRANSLIT' );
if ( $f ) {
	foreach ( $csvs as $line ) {
		fputcsv( $f, $line );
	}
}
fclose( $f );</code></pre>



<p>SplFileObject クラスを用いたコード</p>



<pre class="prism line-numbers"><code class="language-php language-html">$filter = urlencode( 'convert.iconv.utf-8/cp932//TRANSLIT' );
$file = new SplFileObject( 'php://filter/write=' . $filter . '/resource=' . $csv_file, 'a' );
foreach ( $csvs as $line ) {
	$file->fputcsv( $line );
}
$file = null;</code></pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>投稿内で改ページと前後の説明を入力表示するプラグイン</title>
		<link>https://blog.riverforest-wp.info/pagebreak-description/</link>
		
		<dc:creator><![CDATA[Katsushi Kawamori]]></dc:creator>
		<pubDate>Fri, 24 Nov 2023 00:22:32 +0000</pubDate>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[ページネーション]]></category>
		<category><![CDATA[ページ区切り]]></category>
		<category><![CDATA[改ページ]]></category>
		<guid isPermaLink="false">https://blog.riverforest-wp.info/?p=3580</guid>

					<description><![CDATA[はじめに WordPress の投稿記事が長文になってくると、投稿者やユーザーによっては、改ページをした方が編集・閲覧しやすい場合があります。そんな場合ページ区切りブロックを入れるとページネーションを入れてくれますが、そ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p></p>



<h3 class="wp-block-heading">はじめに</h3>



<p>WordPress の投稿記事が長文になってくると、投稿者やユーザーによっては、改ページをした方が編集・閲覧しやすい場合があります。そんな場合<strong>ページ区切りブロック</strong>を入れるとページネーションを入れてくれますが、そこに前ページ・後ページへのリンクにコメントを付加するという事をこのブログでやってみて、良い感じになったのでプラグイン化しました。</p>



<p>SNS で需要があるか尋ねてみたところ、需要がありそうなので、公式プラグインディレクトリへ申請しました。</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c737d6&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c737d6" class="wp-block-image aligncenter size-full wp-lightbox-container"><img loading="lazy" decoding="async" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" width="587" height="844" src="https://blog.riverforest-wp.info/wp-content/uploads/20231124/x-093013.png" alt="" class="wp-image-3600" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20231124/x-093013.png 587w, https://blog.riverforest-wp.info/wp-content/uploads/20231124/x-093013-209x300.png 209w" sizes="auto, (max-width: 587px) 100vw, 587px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>５１日後に、審査が通り公式プラグインディレクトリへ掲載されました。</p>



<div class="pluginstatsview-card-wrap">
	<div>
		<img decoding="async" src="https://ps.w.org/pagebreak-description/assets/icon-256x256.png?rev=3021445" alt="Pagebreak Description のアイコン" class="pluginstatsview-card-icon" />
		<div class="pluginstatsview-after-icon">
			<div class="pluginstatsview-bold"><a href="https://wordpress.org/plugins/pagebreak-description/" class="pluginstatsview-astyle">Pagebreak Description</a></div>
			<div class="pluginstatsview-small">改ページと前後の説明</div>
			<div class="pluginstatsview-small">作者: <a href="https://profiles.wordpress.org/katsushi-kawamori/">Katsushi Kawamori</a></div>
			<div style="clear: both;"></div>
		</div>
	</div>
	<div style="clear: both;"></div>

	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left"><a href="https://wordpress.org/plugins/pagebreak-description/#reviews" title="5.0(5点満点中)" class="pluginstatsview-astyle">	<span class="pluginstatsview-stars">
					<span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span><span class="dashicons dashicons-star-filled"></span>
			</span>
	</a>(1)</span>
		<span class="pluginstatsview-card-right">最終更新: 2日 前</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">90以上サイトで有効化中</span>
		<span class="pluginstatsview-card-right">検証済み: 7.0</span>
	</div>
	<div class="pluginstatsview-small">
		<span class="pluginstatsview-card-left">ダウンロード: <a href="https://downloads.wordpress.org/plugin/pagebreak-description.1.12.zip" class="dashicons dashicons-download pluginstatsview-download"></a></span>
		<span class="pluginstatsview-card-right">リリース: 2024-01-13</span>
	</div>
	<div class="pluginstatsview-small pluginstatsview-card-center">
		2026-03-31 09:30 時点の統計	</div>
</div>



<h3 class="wp-block-heading">動作</h3>



<p>以下の様に動作します。</p>



<figure class="wp-block-video"><video height="896" style="aspect-ratio: 1362 / 896;" width="1362" controls muted src="https://blog.riverforest-wp.info/wp-content/uploads/20231124/pagebreak-description.mp4"></video></figure>



<figure class="wp-block-gallery aligncenter has-nested-images columns-2 is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex">
<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c744cb&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c744cb" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="625" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3577" src="https://blog.riverforest-wp.info/wp-content/uploads/20231124/screenshot-1-1024x625.png" alt="" class="wp-image-3577" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20231124/screenshot-1-1024x625.png 1024w, https://blog.riverforest-wp.info/wp-content/uploads/20231124/screenshot-1-300x183.png 300w, https://blog.riverforest-wp.info/wp-content/uploads/20231124/screenshot-1-768x468.png 768w, https://blog.riverforest-wp.info/wp-content/uploads/20231124/screenshot-1.png 1282w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;69cc632c74d6d&quot;}" data-wp-interactive="core/image" data-wp-key="69cc632c74d6d" class="wp-block-image size-large wp-lightbox-container"><img loading="lazy" decoding="async" width="1024" height="598" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="3578" src="https://blog.riverforest-wp.info/wp-content/uploads/20231124/screenshot-2-1024x598.png" alt="" class="wp-image-3578" srcset="https://blog.riverforest-wp.info/wp-content/uploads/20231124/screenshot-2-1024x598.png 1024w, https://blog.riverforest-wp.info/wp-content/uploads/20231124/screenshot-2-300x175.png 300w, https://blog.riverforest-wp.info/wp-content/uploads/20231124/screenshot-2-768x449.png 768w, https://blog.riverforest-wp.info/wp-content/uploads/20231124/screenshot-2.png 1282w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="拡大する"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>
</figure>



<h3 class="wp-block-heading">仕様</h3>



<ul class="wp-block-list">
<li>改ページと前後の説明を入力します。値はページネーションで使用されます。</li>



<li>このブロックとページ区切りブロックを混在させないでください。コメントがずれてしまう可能性があります。</li>
</ul>



<h3 class="wp-block-heading">フィルター</h3>



<p>表示用の CSS の URL を指定できるフィルターを用意しました。元の CSS（/pagebreak-description/css/custom.css）を参考にして作成できます。</p>



<pre class="prism line-numbers"><code class="language-php language-html">/** ==================================================
 * Filter for CSS URL.
 * Default CSS -&gt; /pagebreak-description/css/custom.css
 */
add_filter(
	'pagebreak_description_css', 
	function() {

		/* If you put mydesign.css in wp-content/uploads */
		$wp_uploads = wp_upload_dir();
		$upload_url = $wp_uploads&#91;'baseurl'];
		if ( is_ssl() ) {
			$upload_url = str_replace( 'http:', 'https:', $upload_url );
		}
		$upload_url = untrailingslashit( $upload_url );
		$url = $upload_url . '/mydesign.css';

		return $url;
	},
	10,
	1
);</code></pre>
]]></content:encoded>
					
		
		<enclosure url="https://blog.riverforest-wp.info/wp-content/uploads/20231124/pagebreak-description.mp4" length="36944634" type="video/mp4" />

			</item>
		<item>
		<title>ブロックの日本語化に関する補足事項</title>
		<link>https://blog.riverforest-wp.info/block-internationalization/</link>
		
		<dc:creator><![CDATA[Katsushi Kawamori]]></dc:creator>
		<pubDate>Wed, 22 Nov 2023 07:13:30 +0000</pubDate>
				<category><![CDATA[Function]]></category>
		<category><![CDATA[block.json]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ブロック]]></category>
		<category><![CDATA[国際化]]></category>
		<category><![CDATA[日本語化]]></category>
		<guid isPermaLink="false">https://blog.riverforest-wp.info/?p=3545</guid>

					<description><![CDATA[はじめに 現在、自作ブロックの日本語化を、「ブロックエディターハンドブック／開発ガイド／国際化」に準じて行っていますが、現在の、block.json でスクリプトをロードする方法には適していないので、ここに捕捉事項として [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">はじめに</h3>



<p>現在、自作ブロックの日本語化を、「ブロックエディターハンドブック／開発ガイド／国際化」に準じて行っていますが、現在の、block.json でスクリプトをロードする方法には適していないので、ここに捕捉事項として記す事にします。</p>



<style>
.simpleblogcard_img_block6fbb86ee0101a55463d46b51d7605ec4 {
  float: right;
  padding: 10px;
}
.simpleblogcard_border6fbb86ee0101a55463d46b51d7605ec4 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title6fbb86ee0101a55463d46b51d7605ec4 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description6fbb86ee0101a55463d46b51d7605ec4 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://ja.wordpress.org/team/handbook/block-editor/how-to-guides/internationalization/>
				<figure class="simpleblogcard_img_block6fbb86ee0101a55463d46b51d7605ec4">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 56px;" src="https://s.w.org/images/home/wordpress-default-ogimage.png" alt="国際化 – Japanese Team – WordPress.org 日本語" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border6fbb86ee0101a55463d46b51d7605ec4">
			ja.wordpress.org			<div class="simpleblogcard_title6fbb86ee0101a55463d46b51d7605ec4">
				国際化 – Japanese Team – WordPress.org 日本語			</div>
							<div class="simpleblogcard_description6fbb86ee0101a55463d46b51d7605ec4">
					国際化とは何か ? 国際化とはソフトウエア、特にここでは WordPress に対して複数言語のサポートを提供…				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>



<h3 class="wp-block-heading">ハンドル名の指定</h3>



<p>上記でのハンドル名の指定方法は、以下の様になっています。この方法では、wp_register_script で、ハンドル名 <strong>myguten-script</strong> を指定し、register_block_type の、editor_script で、<strong>myguten-script </strong>を再度指定しています。</p>



<pre class="prism line-numbers"><code class="language-php language-html">&lt;?php
/**
 * Plugin Name: Simple Block
 * Text Domain: myguten
 */
function myguten_simple_block_init() {
    wp_register_script(
        'myguten-script',
        plugins_url( 'block.js', __FILE__ ),
        array( 'wp-blocks', 'wp-element', 'wp-i18n', 'wp-block-editor' )
    );
 
    register_block_type( 'myguten/simple-block', array(
        'api_version' =&gt; 2,
        'editor_script' =&gt; 'myguten-script',
    ) );
}
add_action( 'init', 'myguten_simple_block_init' );</code></pre>



<p>その後に、php で、<strong>wp_set_script_translations</strong> の第一引数に <strong>registrer_block_type</strong> で登録したハンドル名 <strong>myguten-script</strong> を指定する方式です。</p>



<style>
.simpleblogcard_img_block127bd382a3dbb7878f69ab0917f94367 {
  float: right;
  padding: 10px;
}
.simpleblogcard_border127bd382a3dbb7878f69ab0917f94367 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title127bd382a3dbb7878f69ab0917f94367 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description127bd382a3dbb7878f69ab0917f94367 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://developer.wordpress.org/reference/functions/wp_set_script_translations/>
				<figure class="simpleblogcard_img_block127bd382a3dbb7878f69ab0917f94367">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 52px;" src="https://developer.wordpress.org/wp-content/themes/wporg-developer-2023/images/opengraph-image.png" alt="wp_set_script_translations() – Function | Developer.WordPress.org" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border127bd382a3dbb7878f69ab0917f94367">
			developer.wordpress.org			<div class="simpleblogcard_title127bd382a3dbb7878f69ab0917f94367">
				wp_set_script_translations() – Function | Developer.WordPress.org			</div>
							<div class="simpleblogcard_description127bd382a3dbb7878f69ab0917f94367">
					Sets translated strings for a script.				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>



<pre class="prism line-numbers"><code class="language-php language-html">&lt;?php
function myguten_set_script_translations() {
    wp_set_script_translations( 'myguten-script', 'myguten' );
}
add_action( 'init', 'myguten_set_script_translations' );</code></pre>



<p>上記のやり方を、現在の block.json で読み込む方式に置き換えると以下の様になります。</p>



<pre class="prism line-numbers"><code class="language-php language-html">&lt;?php
/**
 * Plugin Name: Simple Block
 * Text Domain: myguten
 */
function myguten_simple_block_init() {
	register_block_type(
		__DIR__ . '/block/build',
	);
}
add_action( 'init', 'myguten_simple_block_init' );</code></pre>



<p>block.json を置いたディレクトリを検索してそれを読み込むという形です。ここでは、ハンドル名は指定していません。block.json の方を見てみると、editorScript の項目がそれらしいのですが、スクリプトのハンドルという言葉はあるのですが、ファイルへのパスを指定するのが通常の様です。</p>



<style>
.simpleblogcard_img_blockfdd45c7d84d7d4b0b51f73813ba05d9f {
  float: right;
  padding: 10px;
}
.simpleblogcard_borderfdd45c7d84d7d4b0b51f73813ba05d9f {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_titlefdd45c7d84d7d4b0b51f73813ba05d9f {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_descriptionfdd45c7d84d7d4b0b51f73813ba05d9f {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://developer.wordpress.org/block-editor/reference-guides/block-api/block-metadata/>
				<figure class="simpleblogcard_img_blockfdd45c7d84d7d4b0b51f73813ba05d9f">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 52px;" src="https://developer.wordpress.org/wp-content/themes/wporg-developer-2023/images/opengraph-image.png" alt="Metadata in block.json – Block Editor Handbook | Developer.WordPress.org" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_borderfdd45c7d84d7d4b0b51f73813ba05d9f">
			developer.wordpress.org			<div class="simpleblogcard_titlefdd45c7d84d7d4b0b51f73813ba05d9f">
				Metadata in block.json – Block Editor Handbook | Developer.WordPress.org			</div>
							<div class="simpleblogcard_descriptionfdd45c7d84d7d4b0b51f73813ba05d9f">
					Starting with the WordPress 5.8 release, we recommend using the block.json metadata file a&#8230;				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>



<p><strong>register_block_type</strong> では、ハンドル名を渡さずに、WordPress の php の関数 <strong>generate_block_asset_handle</strong> で第１引数にブロック名、第２引数に editorScript を渡したらハンドル名を取得し国際化が上手くいきましたので、以下に示します。</p>



<pre class="prism line-numbers"><code class="language-php language-html">function myguten_set_script_translations() {
　　$script_handle = generate_block_asset_handle( 'myguten/simple-block', 'editorScript' );
　　wp_set_script_translations( $script_handle, 'myguten' );
}
add_action( 'init', 'myguten_set_script_translations' );</code></pre>



<style>
.simpleblogcard_img_block50f29e5693b325092ec4a9c59514e1d8 {
  float: right;
  padding: 10px;
}
.simpleblogcard_border50f29e5693b325092ec4a9c59514e1d8 {
  border-left: solid 8px #cd162c;
  padding: 0.25em 0.25em;
  background: transparent;
}
.simpleblogcard_title50f29e5693b325092ec4a9c59514e1d8 {
  line-height: 155%;
  font-weight: bold;
  display: block;
}
.simpleblogcard_description50f29e5693b325092ec4a9c59514e1d8 {
  line-height: 155%;
  color: #333;
}
</style>
<div class="simpleblogcard_wrap">
			<a style="text-decoration: none;" href=https://developer.wordpress.org/reference/functions/generate_block_asset_handle/>
				<figure class="simpleblogcard_img_block50f29e5693b325092ec4a9c59514e1d8">
			<img decoding="async" style="border-radius: 5px; width: 100px; height: 52px;" src="https://developer.wordpress.org/wp-content/themes/wporg-developer-2023/images/opengraph-image.png" alt="generate_block_asset_handle() – Function | Developer.WordPress.org" />
		</figure>
		<div class="simpleblogcard_inner">
		<div class="simpleblogcard_border50f29e5693b325092ec4a9c59514e1d8">
			developer.wordpress.org			<div class="simpleblogcard_title50f29e5693b325092ec4a9c59514e1d8">
				generate_block_asset_handle() – Function | Developer.WordPress.org			</div>
							<div class="simpleblogcard_description50f29e5693b325092ec4a9c59514e1d8">
					Generates the name for an asset based on the name of the block and the field name provided&#8230;				</div>
					</div>
	</div>
	<div style="clear: both;"></div>
	</a>
</div>



<h3 class="wp-block-heading">block.json の日本語化</h3>



<p>ついでにわかりにくい、block.json の日本語化について以下に記します。上記の、<strong>register_block_type</strong> に、配列で翻訳対象を列記します。keywords は複数あるので更なる配列にします。</p>



<pre class="prism line-numbers"><code class="language-php language-html">&lt;?php
/**
 * Plugin Name: Simple Block
 * Text Domain: myguten
 */
function myguten_simple_block_init() {
	register_block_type(
		__DIR__ . '/block/build',
		array(
			'title' =&gt; _x( 'Simple Block', 'block title', 'myguten' ),
			'description' =&gt; _x( 'Example static block scaffolded with Create Block tool.', 'block description', 'myguten' ),
			'keywords' =&gt; array(
				_x( 'simple', 'block keyword', 'myguten' ),
				_x( 'static', 'block keyword', 'myguten' ),
				_x( 'tool', 'block keyword', 'myguten' ),
			),
		)
	);
}
add_action( 'init', 'myguten_simple_block_init' );</code></pre>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
