WordPress パスワード保護ページの 投稿パスワード を 一括編集できるようにする

パスワード保護ページの投稿パスワードは投稿ごとに設定します。設定方法は、投稿一覧からの「クイック編集」か「投稿の編集」画面で ひとつずつ変更します。
しかし 全て同じパスワードにする場合でも 一括で変更するメニューがありません。1つ1つ変更しかありません。
さらに 定期的にパスワードを変更している場合は、めんどくさいですよね。

そこで 「クイック一括操作」で 投稿パスワードを一括変更できるようになる方法を紹介します。

 

クイック一括操作に投稿パスワードを追加

「bulk_edit_custom_box」というアクションフィルターを使って 投稿パスワードを一括編集できるようにします。

コード

以下のコードを my-plugin.php に張り付けてみてください。

/*
 * クイック一括操作に「投稿パスワード」を追加
 * Fires once for each column in Bulk Edit mode.
 *
 * @since 2.7.0
 * class-wp-posts-list-table.php
 *
 * @param string  $column_name Name of the column to edit.
 * @param WP_Post $post_type   The post type slug.
 * License: GPLv2 or later
*/
function nendebcom_post_password_bulk_quickmenu( $column_name, $post_type ) {

	if( $column_name == 'postpass' && $post_type == 'post' ){
		?>
		<fieldset class="inline-edit-col-right">
			<label class="inline-edit-<?php echo $column_name; ?>">
			<span class="title">パスワード</span>
			<span class="input-text-wrap">
			<input class="inline-edit-password-input" name="post_password" value="" type="text">
			</span>
			</label>
		</fieldset>
		<style type="text/css">th.column-postpass,td.column-postpass{display:none;}</style>
		<?php
	}
}
add_action( 'bulk_edit_custom_box', 'nendebcom_post_password_bulk_quickmenu', 10, 2 );
// ダミーカラム追加
function rachel_carden_managing_my_posts_columns( $columns, $post_type ) {
	if ( $post_type == 'post' )
		$columns[ 'postpass' ] = '';
	return $columns;
}
add_filter( 'manage_posts_columns', 'rachel_carden_managing_my_posts_columns', 10, 2 );

※bulk_edit_custom_box で項目を追加するにはカラムも追加しないといけないので ダミーの(postpass)カラムを追加して CSSで消しています。

 

使用方法

投稿一覧画面で変更したい投稿にチェックをいれて、一括操作のプルダウンを「編集」にして「適用」を押します。

 
パスワード欄に 共通パスワードを入力して、右の「更新」ボタンを押します。

これで選択した投稿はパスワード変更されました。
※一括操作では パスワード欄を 空(カラ) にしても「消去」ではなく、「変更なし」になります。
※パスワード無しにしたい(パスワード保護をやめる)場合は従来通り、1つ1つ変更してください。

 



 

おまけ

「WordPress パスワード保護」とかで調べるといろいろでてきますが、おさらいします。

タイトルの「保護中:」を消す

パスワード保護がされている投稿のタイトルは「保護中:タイトル」となっています。
ここの「保護中:」は以下の方法で変更する事ができます。

/*
 * タイトルの「保護中:」を消す
 *
 * @param  str $title 'Protected: %s' or '保護中:%s;
 * @return str $title
 * License: GPLv2 or later
 */
function nendebcom_protected_title_format( $title ) {
	return '%s';
}
add_filter( 'protected_title_format', 'nendebcom_protected_title_format' );

テーマがちゃんとしてたら タイトル外側の article の class に「post-password-required」と入ります。
これを利用してタイトルに鍵マーク等の装飾をしたらいかがでしょうか。
(パスワード認証後は「post-password-required」が無くなるので 鍵マークも消えます)

 

パスワード認証後の有効期限を変更する

ユーザーはパスワードを入力後、10日間はパスワードを入力しなくても閲覧する事ができます。
この「10日間」というのは以下の方法で変更する事ができます。

/**
 * パスワード保護機能 Cookieの期限を変える
 * Filters the life span of the post password cookie.
 *
 * By default, the cookie expires 10 days from creation. To turn this
 * into a session cookie, return 0.
 *
 * @since WordPress 3.7.0
 * wp-login.php
 * @param int $expires The expiry time, as passed to setcookie().
 *
 * MINUTE_IN_SECONDS : 1分
 * HOUR_IN_SECONDS : 1時間
 * DAY_IN_SECONDS : 1日
 * License: GPLv2 or later
 */
function nendebcom_post_password_expires() {
	return time() + 2 * HOUR_IN_SECONDS;	//2時間
}
add_filter( 'post_password_expires', 'nendebcom_post_password_expires' );

※「return 0;」 にすると 毎回パスワードが必要になるようにできます。

 

パスワード認証フォームの説明文を変更する

/**
 * パスワード認証フォームを変更する
 * Filters the HTML output for the protected post password form.
 *
 * @since 2.7.0
 *
 * @param string $output The password form HTML output.
 * License: GPLv2 or later
 */
function nendebcom_password_form( $output ) {

	global $post;

	$label = 'pwbox-' . ( empty($post->ID) ? rand() : $post->ID );
	$output = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" class="post-password-form" method="post">
		<p>ここに説明文をいれてください。</p>
		<p><label for="' . $label . '">' . __( 'Password:' ) . ' <input name="post_password" id="' . $label . '" type="password" size="20" /></label> 
		<input type="submit" name="Submit" value="送信" /></p></form>
	';

	return $output;
}
add_filter( 'the_password_form', 'nendebcom_password_form' );

※送信ボタンの Enterの翻訳が「確定」になってましたのでここで「送信」と 直書きしておきます。

 
 

あとがき

WordPressの標準の投稿パスワードとは別に、投稿パスワードを複数登録して使う事もできます。
「パスワード保護ページの 投稿パスワード を 複数使えるようにする」 https://nendeb.com/560

 
 

参考

Plugin API/Action Reference/bulk edit custom box – WordPress Codex
https://codex.wordpress.org/Plugin_API/Action_Reference/bulk_edit_custom_box

WP_REST_Posts_Controller::protected_title_format() | Method | WordPress Developer Resources
https://developer.wordpress.org/reference/classes/wp_rest_posts_controller/protected_title_format/

the_password_form | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/the_password_form/

post_password_expires | Hook | WordPress Developer Resources
https://developer.wordpress.org/reference/hooks/post_password_expires/

Using Password Protection – WordPress Codex
https://codex.wordpress.org/Using_Password_Protection