本日はWordPressの管理画面カスタマイズについて。
一つだけどうしても消せなくて悩んでいたのが、投稿一覧画面にある一括操作の「編集」操作。
この編集操作、適用して使用すると一覧画面でタグやカテゴリ作成者コメント果てはフォーマットまで様々なステータスを編集することができますが、何か一つでも使用して欲しくないものが含まれている時、絶対に触ってほしくありません。もうできれば存在に気付かないで欲しい。
CSSで消せばいいやと思っていたのですが、Safariでoptionタグにdisplay noneが効かないという恐ろしいことが発覚。それならば設定のphpをいじって編集だけ出力しないようにしてやります。
設定のPHPをいじる
WordPress ver4 を使用しています。設定のPHPファイルは下記
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 |
/** * Display the bulk actions dropdown. * * @since 3.1.0 * @access protected * * @param string $which The location of the bulk actions: 'top' or 'bottom'. * This is designated as optional for backwards-compatibility. */ protected function bulk_actions( $which = '' ) { if ( is_null( $this->_actions ) ) { $no_new_actions = $this->_actions = $this->get_bulk_actions(); /** * Filter the list table Bulk Actions drop-down. * * The dynamic portion of the hook name, `$this->screen->id`, refers * to the ID of the current screen, usually a string. * * This filter can currently only be used to remove bulk actions. * * @since 3.5.0 * * @param array $actions An array of the available bulk actions. */ $this->_actions = apply_filters( "bulk_actions-{$this->screen->id}", $this->_actions ); $this->_actions = array_intersect_assoc( $this->_actions, $no_new_actions ); $two = ''; } else { $two = '2'; } if ( empty( $this->_actions ) ) return; echo "<label for='bulk-action-selector-" . esc_attr( $which ) . "' class='screen-reader-text'>" . __( 'Select bulk action' ) . "</label>"; echo "<select name='action$two' id='bulk-action-selector-" . esc_attr( $which ) . "'>\n"; echo "<option value='-1' selected='selected'>" . __( 'Bulk Actions' ) . "</option>\n"; foreach ( $this->_actions as $name => $title ) { $class = 'edit' == $name ? '' : ''; echo "\t<option value='$name'$class>$title</option>\n"; } echo "</select>\n"; submit_button( __( 'Apply' ), 'action', '', false, array( 'id' => "doaction$two" ) ); echo "\n"; } |
修正前
1 2 3 4 |
foreach ( $this->_actions as $name => $title ) { $class = 'edit' == $name ? ' class="hide-if-no-js"' : ''; echo "\t<option value='$name'$class>$title</option>\n"; } |
これに、if文を足してやります。
現在「name属性がeditの場合はclassを付与してechoする」記述になっているので、ちょっとイジって「name属性がeditの場合はechoしない」ようにしてやればいいわけです。
クラスの文とか残っていますが、いらんところを触ってエラー吐いたら怖いのでif文で囲むだけにしました。。
修正後
1 2 3 4 5 6 7 |
foreach ( $this->_actions as $name => $title ) { if($name == "edit"){ $class = 'edit' == $name ? '' : ''; }else{ echo "\t<option value='$name'$class>$title</option>\n"; } } |
修正してアップするとeditのname属性を持つoption(編集)がechoされなくなっています。
修正後のphpはこちら。
PHPサンプル