フォーラムへの返信

13件の返信を表示中 - 181 - 193件目 (全193件中)
  • すみません。後者のコードを修正させていただきます。

    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'] );
    }

    管理画面に限定した処理なので、すでに投稿がある場合、フロントエンド上でそれらの投稿は表示されます。

    しかし、他の部分への影響が大きいと思われるので慎重にカスタマイズしたほうが良さそうですね。

    だいぶ以前の質問なので解決済みかもしれませんが返信します。

    #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 );

    もう少し考えてみます。

    しばらくしてから確認すると送信できるようになっていました。
    レンタルサーバーのWAF設定が原因だった模様です。

    (タイトルでURLフィールドと書きましたが、WAF設定ONだと、どのフォームでも今回の文字列はForbiddenを返してきます。)

    > 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を利用するメリットがいまいちわからないのです。。

    素朴な疑問でした。

13件の返信を表示中 - 181 - 193件目 (全193件中)