Toshimichi Mimoto
フォーラムへの返信
-
フォーラム: 使い方全般
返信が含まれるトピック: 管理画面のカスタム投稿の投稿画面を判定する方法すみません。後者のコードを修正させていただきます。
add_action( 'load-post.php', 'meta_boxes_for_mobile' ); add_action( 'load-post-new.php, 'meta_boxes_for_mobile' ); function meta_boxes_for_mobile() { if ( ! $post_type = filter_input( INPUT_GET, 'post_type' ) { $post_id = filter_input( INPUT_GET, 'post' ); $post_type = get_post_type( $post_id ); } if ( in_array( $post_type, array( 'post', 'page' ), true ) ) return; add_meta_box( 'sp_post_title', /* 省略 */ ); add_meta_box( 'sp_post_content', /* 省略 */ ); }
修正前のままだと新規投稿でメタボックスが表示されません。
フォーラム: 使い方全般
返信が含まれるトピック: Fatal error: Class 'WP_Roles' not foundのエラーWP_Roles
というクラスは(WordPress Root)/wp-includes/capabilities.php
で定義されています。
誤操作で当該ファイルを削除したりしていませんか?フォーラム: 使い方全般
返信が含まれるトピック: 管理画面のカスタム投稿の投稿画面を判定する方法前者は特定の投稿タイプのみでメタボックスを追加する方法ですね。
今回の質問にはそぐわない回答でした。。後者の方法で条件分岐部分のコードを変えればお望みの挙動になるのではないでしょうか。
フォーラム: 使い方全般
返信が含まれるトピック: 管理画面のカスタム投稿の投稿画面を判定する方法あるいは、
add_action( 'load-post.php', 'meta_boxes_for_mobile' ); function meta_boxes_for_mobile() { $post_id = filter_input( INPUT_GET, 'post' ); $post_type = get_post_type( $post_id ); if ( in_array( $post_type, array( 'post', 'page' ), true ) ) return; add_meta_box( 'sp_post_title', /* 省略 */ ); add_meta_box( 'sp_post_content', /* 省略 */ ); }
フォーラム: 使い方全般
返信が含まれるトピック: 管理画面のカスタム投稿の投稿画面を判定する方法カスタム投稿タイプ登録の際に、引数
register_meta_box_cb
に任意の関数名を指定します。(下記の場合、special_post
という投稿タイプ登録時にmeta_boxes_for_mobile
という関数を指定しています。)add_action( 'init', 'register_special_post' ); function register_special_post() { $labels = array( /* 省略 */ ); $args = array( 'labels' => $labels, /* 省略 */ 'register_meta_box_cb' => 'meta_boxes_for_mobile' ); register_post_type( 'special_post', $args ); }
そして指定した関数定義内でメタボックスの追加をして下さい。
function meta_boxes_for_mobile() { add_meta_box( 'sp_post_title', /* 省略 */ ); add_meta_box( 'sp_post_content', /* 省略 */ ); }
フォーラム: 使い方全般
返信が含まれるトピック: 管理者権限だけど一部の機能のみ制限したいユーザー単位で条件分岐をして
remove_submenu_page( 'themes.php', 'widgets.php' );
でページの表示をさせないようにすることができます。
しかしテーマカスタマイズ内のウィジェット項目は表示されます。何人ものスタッフでテーマの外観を編集することは無いと思うのですが、User Role Editor などの権限管理プラグインで特定ユーザー以外から
edit_theme_options
を取り除く、ではダメなのでしょうか。また全員が管理者権限というのも空恐ろしい気もするので(外部業者さんに依頼した)プラグイン側での権限切り分けをお願いしてみてください。
フォーラム: 使い方全般
返信が含まれるトピック: 標準の投稿タイプを無効化したいadd_action( 'admin_init', 'deregister_post_type_post' ); function deregister_post_type_post() { global $wp_post_types; unset( $wp_post_types['post'] ); }
管理画面に限定した処理なので、すでに投稿がある場合、フロントエンド上でそれらの投稿は表示されます。
しかし、他の部分への影響が大きいと思われるので慎重にカスタマイズしたほうが良さそうですね。
フォーラム: 使い方全般
返信が含まれるトピック: サブメニューが1つもないときのカスタム投稿タイプの管理画面表示だいぶ以前の質問なので解決済みかもしれませんが返信します。
#29714 (user_can_access_admin_page() returning false for edit.php?post_type=CPT) – WordPress Trac
ならびに、
WordPress capabilities: How to restrict Add New while allowing Edit – herb miller
で解決法が提示されているようです。僕は別の方法で下記のようにしています。
add_action( 'admin_menu', 'fix_for_no_submenus', 99 ); function fix_for_no_submenus() { global $pagenow, $submenu; if ( $pagenow !== 'edit.php' || ! $post_type = filter_input( \INPUT_GET, 'post_type' ) ) return; if ( ! current_user_can( 'read', $post_type ) ) return; $page = 'edit.php?post_type=' . $post_type; if ( ! isset( $submenu[$page] ) || count( $submenu[$page] ) > 1 ) return; $submenu[$page][] = [ '', '', '' ]; }
サブメニューに空の配列を追加してます。
不要な配列がグローバル変数に入っていることが嫌ならば adminmenu フックで削除するのもいいかもしれませんね。
フォーラム: 使い方全般
返信が含まれるトピック: save_post にフックした関数が実行されない?自己解決しました!
save_post
アクションの際には、$q = filter_input_array( \INPUT_GET, self::$def, false );
に、
$q['post']
なんて存在しないんですよね…$maybe_domain = array_key_exists( 'post', $q ) ? get_post_type( $q['post'] ) : filter_input( \INPUT_POST, 'post_type' );
に書き換えることで期待通りの動きをしてくれました。
単純に$maybe_domain
は空っぽで、結果、$this->ns
が存在しないだけだったというお粗末な結末でした…お騒がせしました。
フォーラム: 使い方全般
返信が含まれるトピック: save_post にフックした関数が実行されない?途中経過です。
admin_parse_request()
メソッド内の$maybe_domain = array_key_exists( 'post', $q ) ? get_post_type( $q['post'] ) : null;
が原因っぽいですね。
下記に変えて、フックするタイミングをずらすと機能するような…add_action( 'current_screen', function( $screen ) { $this->ns = $screen->post_type; }, 0 );
もう少し考えてみます。
フォーラム: プラグイン
返信が含まれるトピック: Contact Form 7 の URLフィールドでスクリプトをストップさせるURLしばらくしてから確認すると送信できるようになっていました。
レンタルサーバーのWAF設定が原因だった模様です。(タイトルでURLフィールドと書きましたが、WAF設定ONだと、どのフォームでも今回の文字列はForbiddenを返してきます。)
フォーラム: プラグイン
返信が含まれるトピック: Contact Form 7 の URLフィールドでスクリプトをストップさせるURL> Miyoshiさま
ご返答ありがとうございます。
使用しているレンタルサーバー(heteml)のWAF検知ログを確認すると当該問合せ者と思われるIPアドレスからのアクセスが拒否されたログが確認できました。WAF設定をオフにした状態でも症状が継続しているので原因は特定できていませんが、フォームが用済みになった際に検証したいと思います。
勉強になりました。
ありがとうございます。フォーラム: 使い方全般
返信が含まれるトピック: add_meta_box関数で複数のメタボックスを設置したいjim912さま
ありがとうございます!
無事2つのメタボックスが設置できました。
HTML IDを軽く見ていました。。考えを改めなければいけませんね。本件について解決済みとさせて頂きます。
…
ところで、add_meta_boxを実行するのにregister_meta_box_cbで関数を呼び出すのと
add_actionでアクションを追加する場合で本質的な違いは有るのでしょうか?前者の場合、カスタム投稿タイプの定義上で関数を呼び出しているのにadd_meta_boxの
$post_typeパラメーターでポストタイプの指定が必要なのでなにかスッキリしません。
register_meta_box_cbを利用するメリットがいまいちわからないのです。。素朴な疑問でした。