web-dev-qa-db-ja.com

カテゴリ/用語説明の管理用語 - 管理パネル

用語に長い説明がある分類法を使用しています。 WordPressが10のカテゴリについてこれらの説明を表示しようとすると、管理パネルが非常に見にくくなります。カテゴリ/用語の説明列に表示される単語や文字の数を制限する方法を見つけようとしていますが、カテゴリの説明を表示するための正しいフックが見つかりません。私はこの フックのリスト をガイドとして使っていますが、正しい方向を指していると思われる2つのフックは次のとおりです。

フィルター:manage_taxonomies_for_{$post_type}_columns

function funcy_test($empty = '', $column, $term_id) 
{
    return '';
}
add_filter('manage_taxonomies_for_cpt_products_columns', 'funcy_test', 10, 3);

私はそれが周りの空の列を返すことを期待したが、代わりに私は結果が表示されませんでした。考えられる解決策の1つは、Description cateogryを完全に削除してcustom_columnsフックを使用して独自のdescription列を追加することですが、これは面倒な作業にすぎません。

管理者パネルで用語の説明の単語や文字を制限する方法はありますか?

1
Howdy_McGee

わかりました、私はこれを再検討し、私の答えを修正しました。

しかし私が前に言ったように:

あなたが使用しようとしているフックはあなたが意図している目的のためには機能しない/できない、単にその発生はclass-wp-posts-list-table.phpにあるからです。 class-wp-terms-list-table.phpになります。


1。できることは次のとおりです。

  • admin_head-$hook_suffix および get_terms フックを使用する

    add_action(
        'admin_head-edit-tags.php',
        'wpse152619_edit_tags_trim_description'
    );
    function wpse152619_edit_tags_trim_description() {
        add_filter(
            'get_terms',
            'wpse152619_trim_description_callback',
            100,
            2
        );
    }
    
    function wpse152619_trim_description_callback( $terms, $taxonomies ) {
        // print_r($taxonomies);
        if( 'category' == $taxonomies[ 0 ] ) {
            foreach( $terms as $key => $term ) {
                $terms[ $key ]->description =
                    wp_trim_words(
                        $term->description,
                        12,
                        ' [...]'
                    );
            }
        }
        return $terms;
    }
    

    これは、説明を指定されたWord数にトリミングします。


2。もう1つよく見られる可能性は、デフォルトの列を削除して新しい列を作成することです。

  • manage_{$this->screen->taxonomy}_custom_column および manage_{$this->screen->id}_columns フックを使用する

    function wpse152619_create_new_description_column( $columns ) {
        if ( $_GET[ 'taxonomy' ] == 'category' ) {
            // uncomment next line to remove default description column
            //unset( $columns[ 'description' ] );
            // create new description column
            $columns[ 'new_description' ] = 'New Description';
            return $columns;
        }
        return $columns;
    }
    add_filter(
        'manage_edit-category_columns',
        'wpse152619_create_new_description_column'
    );
    
    
    function wpse152619_new_description_column_content(
        $deprecated,
        $column_name,
        $term_id
    ) {
        if ( $column_name == 'new_description' ) {
            $new_description =
                wp_trim_words(
                    term_description(
                        $term_id,
                        $_GET[ 'taxonomy' ]
                    ),
                    12,
                    ' [...]'
                );
            echo $new_description;
        }
    }
    add_filter(
        'manage_category_custom_column',
        'wpse152619_new_description_column_content',
        10,
        3
    );
    


3。また可能性があります:

  • WP_List_Tableのように、クラス WP_Terms_List_Table を自分で拡張します。
  • あなたの場合、主な目標はcolumn_descriptionメソッドを再定義することです。
  • さらに、edit-tags.phpに似た新しいテンプレートを作成しますが、新しく作成したクラスを使用します。
  • それからあなたはあなたの新しいテンプレートがデフォルトのテンプレートの代わりにロードされていることを確認しなければならないでしょう。
  • わかりました、しかしそれはただの概要でもありえます。この単純なケースでは意味がありませんが、高度なユースケースではこれが考慮すべきアプローチです。


私は上記があなたの問題を解決するはずだと確信しています。カテゴリ編集ページの例を示しましたが、カスタム分類法のためにこれを行う方法は明らかであるはずです。必要なものに応じて、単純なアプローチまたは複雑なアプローチを選択できます。あなたの場合、最初のものは問題ないはずです。

最後になりましたが、以下の関数は必要な情報を取得するのに便利です。

add_action( 'admin_head', 'wpse152619_dbg_dev' );
function wpse152619_dbg_dev() {
    global $pagenow;
    print_r( $pagenow );
    echo '<br>';
    print_r( $_GET[ 'taxonomy' ] );
    echo '<br>';
    $current_screen = get_current_screen();
    print_r( $current_screen->id );
}
3
Nicolai