WordPress как на ладони
wordpress jino

Как массово изменить количество постов и терминов на странице в админке?

На сайте много произвольных постов и таксономий. По дефолту в админке вордпресс отображает по 20 постов и по 20 категорий (терминов) на странице. Как можно изменить для всех разом, а не для каждого отдельно (для всех типов постов и для всех таксономий) это количество на произвольное?

для post_type нашел такой код

function my_edit_per_page( $result, $option, $user ) {
  return 100;
}
add_filter( 'get_user_option_edit_post_per_page', 'my_edit_per_page', 10, 3 ); // для стандартного типа постов
add_filter( 'get_user_option_edit_photo_per_page', 'my_edit_per_page', 10, 3 ); // для типа photo

есть еще хук edit_{$post_type}_per_page, но вручную все типы перечислять неудобно.

для страниц с таксономиями ничего не нашел, хотя есть аналогичный хук edit_{$taxonomy}_per_page

вариантов кода с хуками edit_{$post_type}_per_page и edit_{$taxonomy}_per_page не нашел, но подозреваю что они будут такими же как и код вверху, т.е все нужно перечислять по-отдельности.

есть варианты?

0
Игорь 6 месяцев назад
  • 1
    campusboy1832 cайт: wp-plus.ru

    Получить список типов постов get_post_types и через цикл их по этим хукам. Тоже самое с таксономиями - get_taxonomies.

    Kama 6 месяцев назад

    В частности нужно сделать так:

    if( is_admin() ){
    
    	add_action('init', 'set_any_per_page');
    	function set_any_per_page(){
    		// для постов - хук edit_{$post_type}_per_page
    		$post_types = get_post_types( array('_builtin' => false), 'names');
    		foreach( $post_types as $post_type ){
    			add_filter( "edit_{$post_type}_per_page", 'my_edit_per_page' );
    		}
    
    		// для такс - хук edit_{$taxonomy}_per_page - 'edit_' . $this->screen->taxonomy . '_per_page'
    		$taxonomies = get_taxonomies( array('_builtin' => false), 'names' );
    		foreach( $taxonomies as $taxonomy ){
    			add_filter( "edit_{$taxonomy}_per_page", 'my_edit_per_page' );
    		}
    	}
    
    	function my_edit_per_page( $result, $option, $user ) {
    		return 100;
    	}
    
    }
    

    И обрати внимание что есть другие хуки, не те что ты нашел. Твои хуки фильтруют опцию юзера получаемую из БД, но есил её там нет, то возомжно хук просто не сработает... Поэтому лучше использовать прямые хуки. Их в ядре оказало много:

    Игорь 5 месяцев назад

    спасибо, наверно, должно получиться, но массив $post_types оказывается пустым почему-то https://wp-kama.ru/function/get_post_types/comment-page-1#comment-18900

    Kama 5 месяцев назад

    Я там ответил уже. Нельзя его совать прямо в functions.php - нужно вызывать из контекста. Повесь на хук, раз ты из functions.php вызываешь. Поправил код в комменте выше...

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.