web-dev-qa-db-ja.com

Edit.phpでinline_edit()を無効にする

WP_Posts_List_Tableクラスにはinline_edit()という名前の関数があり、それはwp-admin/edit.phpで使用されている(しかし最初は隠されている)クイックエディットテーブル全体のレンダリングを担当します。

私が取り組んでいるサイトには何千ものカテゴリ用語があり、それらすべてがチェックボックス付きのリストアイテムとしてこのクイック編集テーブルに追加されるため、preventそのテーブルがレンダリングされないようにします。それはedit.phpを巨大で遅くロードするようにします(そして、いくつかのjQueryプラグインで特定のケースではいくつかのブラウザを失速させさえします)。

このテーブルがレンダリングされないようにするためのWP_Posts_List_Table内のフィルターやアクションを使用した方法はありません。 edit.phpにしないようにする方法も、最後に$wp_list_table->inline_edit();を呼び出しません。私の目標を達成するための何らかの(適切な)方法はありますか?コアをハッキングすることなく、もちろん。

(私はpost_row_actionsフィルターを使って投稿行のクイック編集リンクを無効にする方法を知っていますが、その巨大なテーブルはまだedit.phpでレンダリングされ送信されています。)

1
Adrian B

私はフィルタを見つけることもできませんでしたが、分類法でそのUIを表示できるかどうかを確認します。それで私が私のプラグインの1つでしていたのは編集ページの$wp_taxonomiesグローバル変数を微調整することでした。

/**
 * Disable the UI for categories, but only on EDIT screen
 * which prevents them from appearing in quick edit
 */
add_action( 'load-edit.php', 'wpa_130501_disable_ui' );

function wpa_130501_disable_ui(){
    global $wp_taxonomies;
    $wp_taxonomies['category']->show_ui = FALSE;
}

クイック編集セクションは、将来のアップデートで大いに愛を必要とします。

1
helgatheviking

しばらく同じ問題を抱えていた、私は私がedit.phpページにいるときにすべてのチェックボックスを削除するためにフィルタでterm_listを変更することによってそれを解決しました。まず、これでリンクを削除できます。

    function remove_quick_edit( $actions ) {
        unset($actions['inline hide-if-no-js']);
        return $actions;
    }
    add_filter('post_row_actions','remove_quick_edit',10,1);

これはリンクを削除するだけですが、実際のカテゴリセレクタはまだソースコードに含まれています...

    add_filter('wp_terms_checklist_args', 'remove_terms_from_list', '', 2);
    function remove_terms_from_list( $args, $post_id){
        global $pagenow, $typenow;
        if ($pagenow == 'edit.php' && $typenow == 'post-type-name' || $pagenow == 'nav-menus.php') {
            $args['walker'] = new wiki_remove_tax_quickedit;
            $args['taxonomy'] = ' ';
        }
        return $args;
    }

    class wiki_remove_tax_quickedit extends Walker {
        var $tree_type = 'category';
        var $db_fields = array ('parent' => 'parent', 'id' => 'term_id');

        function start_lvl( &$output, $depth = 0, $args = array() ) {
                $indent = str_repeat("\t", $depth);
                $output .= "$indent<ul class='children'>\n";
        }

        function end_lvl( &$output, $depth = 0, $args = array() ) {
                $indent = str_repeat("\t", $depth);
                $output .= "$indent</ul>\n";
        }

        function start_el( &$output, $category, $depth, $args, $id = 0 ) {

        }
    }

(投稿タイプ名をあなたの投稿タイプに変更してください)

0
passatgt