Attachment — Прикрепить к КАТЕГОРИИ а не к записи Можно ли расширить функционал ? Хочу закреплять картинку к категории или термину.
Нарывался на эту проблему как-то. Нет хука номрально в ВП. Хотел даже в ядро написать, надо бы...
А пока вот такой класс нашел у себя. Он позволяет через хук менять значение этой колонки.
<?php /** * Class to extend the "Uploaded to" column in the media library. * Adds the ability to modify the column value. * * Usage: * * 1) Initialize the class: * ``` * Media_Uploaded_To_Column_Extend::init(); * ``` * * 2) Use the filter: * ``` * add_filter( 'media_parent_more_column_value', 'my_change_media_uploaded_to_column_value', 10, 2 ); * function my_change_media_uploaded_to_column_value( $column_vals, $post ){ * // $column_vals - array of values for the "Uploaded to" column * return $column_vals; * } * ``` */ class Media_Uploaded_To_Column_Extend { public static function init(): void { add_filter( 'manage_upload_sortable_columns', [ __CLASS__, 'replace_media_parent_sortable_column' ] ); add_filter( 'manage_media_columns', [ __CLASS__, 'replace_media_parent_column' ] ); add_action( 'manage_media_custom_column', [ __CLASS__, 'change_media_parent_column_val' ], 10, 2 ); } public static function replace_media_parent_sortable_column( array $columns ): array { $columns['parent_more'] = [ 'parent' ]; unset( $columns['parent'] ); return $columns; } public static function replace_media_parent_column( array $columns ): array { $new = [ 'parent_more' => _x( 'Uploaded to', 'column name', 'default' ), ]; $position = array_search( 'parent', array_keys( $columns ), true ) + 1; // !before unset unset( $columns['parent'] ); return array_slice( $columns, 0, $position ) + $new + $columns; } /** * Fills/complete the content of the "Uploaded to" (parent) column. * * @param string $colname * @param int $post_id */ public static function change_media_parent_column_val( $colname, $post_id ): void { if( 'parent_more' === $colname ){ global $wp_list_table; $post = get_post( $post_id ); ob_start(); $wp_list_table->column_parent( $post ); $_val = ob_get_clean(); // see https://wp-kama.ru/function/WP_Media_List_Table::column_parent $column_vals = preg_split( '~<br[^>]*>~', $_val ); /** * Allows to change the "parent" column value for the media library. * * @param array $column_vals * @param WP_Post $post */ $column_vals = (array) apply_filters( 'media_parent_more_column_value', $column_vals, $post ); echo implode( '<br />', $column_vals ); } } }Пример использвоания
Инитишь класс:
Юзаешь хук. Пример из кода моего, там я хук несколько мест, но тут картинка для термина как раз, просто отображается что к термину прикреплена...
// меняем значение колоки - картинка для термина add_action( 'media_parent_more_column_value', media_uploaded_to__term_image_val(...), 10, 2 ); function media_uploaded_to__term_image_val( $column_vals, $attach ) { if( ! class_exists( WP_Term_Image::class ) ){ return $column_vals; } $out = []; $term_ids = WP_Term_Image::get_attach_term_ids( $attach->ID ); foreach( $term_ids as $term_id ){ $out[] = sprintf( 'Term: <a href="%s" target="_blank">%s</a>', get_edit_term_link( $term_id ), esc_html( get_term( $term_id )->name ) ); } return $out ? implode( '<br>', $out ) : $column_vals; }