WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Как удалить возможность (метабоксы) у страниц и добавить блок произвольных полей?

Доброго времени суток. Нужно изменить ввод и вывод нескольких страниц по их ID:

  1. Удалить зарегистрированную возможность у страниц по их ID.
  2. Добавить блок произвольных полей страницам по их ID.

Хотелось бы сделать это без плагинов, пните пожалуйста в нужном направлении. Буду очень благодарен.

0
Maestro
5.6 лет назад 42
  • 3
    Kama9616
    ## Удаляем ненужные метабоксы у типа записи
    ## Удалить зарегистрированную возможность у страниц по их ID.
    add_filter( 'admin_menu', 'hpl_manager_meta_boxes' );
    function hpl_manager_meta_boxes(){
    	// выходим если это не редактирование поста
    	if( @ $_GET['action'] !== 'edit' )
    		return;
    
    	$post = get_post( $_GET['post'] );
    
    	// выходим если это не нужный там пост
    	if( ! in_array($post->ID, [72,98]) )
    		return;
    
    	$post_type = 'post';
    
    	// удаляем свойства типа записи (метабокс)
    	remove_post_type_support( $post_type, 'title' );
    	remove_post_type_support( $post_type, 'editor' );
    	remove_post_type_support( $post_type, 'author' );
    	remove_post_type_support( $post_type, 'thumbnail' );
    	remove_post_type_support( $post_type, 'excerpt' );
    	remove_post_type_support( $post_type, 'trackbacks' );
    	remove_post_type_support( $post_type, 'custom' );
    	remove_post_type_support( $post_type, 'comments' );
    	remove_post_type_support( $post_type, 'revisions' );
    	remove_post_type_support( $post_type, 'post-formats' );
    
    	// удалим метабоксы
    	remove_meta_box( 'commentsdiv' , $post_type , 'normal' );      // removes comments
    	remove_meta_box( 'authordiv' , $post_type , 'normal' );        // removes author
    	remove_meta_box( 'pageparentdiv' , $post_type , 'normal' );    // свойства записи
    	remove_meta_box( 'tagsdiv-post_tag' , $post_type , 'normal' ); // метки
    	remove_meta_box( 'categorydiv' , $post_type , 'normal' );      // рубрики
    	remove_meta_box( 'postcustom' , $post_type , 'normal' );       // произвольные поля
    	remove_meta_box( 'commentstatusdiv' , $post_type , 'normal' ); // обсуждение
    	remove_meta_box( 'slugdiv' , $post_type , 'normal' );          // ярлык
    
    }
    
    ## добавляем мтабокс по условию (на нужных постах)
    new Kama_Post_Meta_Box( array(
    	'id'        => '_mybox',
    	'title'     => 'Виден для указанного поста',
    	'post_type' => 'post',
    	// Добавить блок произвольных полей страницам по их ID.
    	'disable_func' => function($post){
    		if( ! in_array($post->ID, [72,98]) ) return 'отключить';
    	},
    	'fields'    => array(
    		'fname' => array( 'type'=>'text', 'title'=>'Поле-поле' ),
    	),
    ) );

    Получим:

    Свой метабокс в этом коде добавляется через класс Kama_Post_Meta_Box. Он позволяет создать любой метабокс и указать условия его появления. Только это все кодом делается. Пример, тут показан и на странице описания класса.

    По удалению ненужных метабоксов для указанного по ID поста: в коде все есть. $post_type = 'post'; поменяй и ID записи(сей) поменяй/укажи как надо. Больше особых комментариев вроде бы нет.

    Maestro 5.6 лет назад

    Огромное спасибо)То что искал.

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