カテゴリー制限の現在形
残念ながらワードプレス公式サイトからは削除されてしまった「Allow Categories」プラグインですが、このサイトで必要とする機能を代替するプラグインが見つからないため、引き続き使用しています。過去の記事で何度か改修の記録を公開していますが、今回はPHPのメジャーバージョンアップ(PHP 7.4 –> 8.1)に伴う大規模改修(比較的)に関してです。
ますはオリジナルのコードから、この書き方でPHP 7.4の時は問題ありませんでしたが、PHP 8.1ではエラーとなりロードされませんでした。
add_option('allow_option', array(), '', false); add_action('admin_menu', array('Allow_Category','allow_menu')); add_action('admin_head', array('Allow_Category','allow_adminHead')); if('wp-login.php' != $pagenow && 'wp-register.php' != $pagenow) add_action('template_redirect', array('Allow_Category','allow_catRedirect')); add_action('delete_post', array('Allow_Category','allow_delPost')); add_action('posts_where', array('Allow_Category','allow_where')); add_filter('comment_text_rss', array('Allow_Category','allow_comments')); add_filter('getarchives_where', array('Allow_Category','allow_where')); add_filter('wp_get_nav_menu_items', array('Allow_Category','allow_menu_nav'));
PHPの言語リファレンスやググってみた情報から、以下のように改修しました。
add_option('allow_option', array(), '', false); add_action('admin_menu', [new Allow_Category, 'allow_menu']); add_action('admin_head', [new Allow_Category, 'allow_adminHead']); if('wp-login.php' != $pagenow && 'wp-register.php' != $pagenow) add_action('template_redirect', [new Allow_Category, 'allow_catRedirect']); add_action('delete_post', [new Allow_Category, 'allow_delPost']); add_action('posts_where', [new Allow_Category, 'allow_where']); add_filter('comment_text_rss', [new Allow_Category, 'allow_comments']); add_filter('getarchives_where', [new Allow_Category, 'allow_where']); add_filter('wp_get_nav_menu_items', [new Allow_Category, 'allow_menu_nav']);
また、今回の改修に合わせ、公開と非公開に関してルールを変更しました。これまでは「公開」カテゴリーか「公開」カテゴリーが含まれていないか、という若干曖昧な判定方法でしたが、今後は「公開」カテゴリーか「公開限定」カテゴリー(ログインユーザー以外には非公開)かを明確に指定することにしました。公開したくない記事は、カテゴリー「公開限定」を忘れずに指定するようにして下さい。この変更で「公開限定」カテゴリーを選べば、その後にどんなカテゴリーを指定しても「公開」されることはありません。この改修の結果。ページナビゲーションの除外カテゴリー指定がすっきりすることになりました。ログインユーザー向けには「184」=「公開限定」をページナビゲーションから除外するように指定します。
if ( !is_user_logged_in() ) : $args = wp_parse_args( $args, array( 'in_same_term' => true, 'excluded_terms' => '184', 'taxonomy' => 'category', 'screen_reader_text' => __( 'Post navigation' ), ) ); endif; the_post_navigation($args);