WordPress как на ладони
WordPress темы и плагины за 250 рублей wordpress jino

Увеличение колонок в админке WordPress при публикации записи

Привет. При публикации материала в настройках экрана WordPress можно указать 1 или 2 колонки. Можно ли методами движка увеличить это количество до 3, к примеру?

Цель: много создано кастомных таксономий (публикуемый материал нужно классифицировать по различным критериям), а так как вторая (правая, узкая) колонка в таком случае превращается в длинную портянку, то хотелось бы такую же третью колонку. Экран большой, свободно позволяет разместить её.

Заметки к вопросу:
Kama 2 года назад

Ответ на вопрос. Решение было найдено в процессе обсуждения и вылилось в плагин для создания дополнительных колонок при редактировании записи: Third Column (kama-fix)

Kama 1.4 год назад

Нашел отличный плагин по этой теме - Three Column Screen Layout

1
campusboy
2801
2 года назад
  • 1
    Kama5395

    Можно. Вот попробовал, что-то более менее вразумительное сделать, получилось так:

    Делается не сложно, все завязано на хуке dbx_post_sidebar

    <?php
    
    if( is_admin() ){
    
    add_action('dbx_post_sidebar', function($post){
    	?>
    	<style>
    		#postbox-container-2{ width:calc(100% - 300px) !important; margin-right:20px; }
    		#postbox-container-3.postbox-container{ margin-right:-300px; width:280px; }
    		#side3-sortables{ min-height:3em; }
    	</style>
    	<div id="postbox-container-3" class="postbox-container">
    		<?php do_meta_boxes(null, 'side3', $post); ?>
    	</div>
    	<?php
    });
    
    }

    Далее, при регистрации метабокса add_meta_box() указываем положение в параметре $context как side3. Ну или просто перетаскиваем туда нужные боксы, для каждого пользователя положение будет сохранено.

    Сложности со стилями: пробовал настроить, чтобы были две линии боксов справа. Но там контейнеры боксов перемешаны в коде, настроить быстро не получилось, возиться не стал. Под «перемешано» имею ввиду, блок контента идет первый, дальше правая полоса, дальше метабоксы под контентом и в конце наш новый контейнер. И изменить этот порядок никак нельзя, только стилями выкручиваться... Можешь попробовать стили настроить, если что получится, жду их на этой странице smile

    campusboy 2 года назад

    Спасибо, Тимур, ты меня прям приободрил! Сегодня понедельник, день тяжёлый, потому после слов о том, что надо эту идею дорабатывать, я решил уделить ещё 15 минут на поиски и, если не удалось бы, стал дорабатывать то, что ты написал.

    Но в отличие от вчера, сегодня мне улыбнулась удача. Решение найдено и реализовано в плагине Third Column. Делает как нужно! Для тех, кто предпочитает код сувать только в functions.php, да и просто для ознакомления прилагаю код плагина:

    Главный файл third-column.php

    <?php
    /*
    Plugin Name: Third Column
    Plugin URI: http://www.bang-on.net/thirdcolumn.zip
    Description: Adds a third column to the page and post edit form
    Author: Marcus Downing
    Author URI: http://www.bang-on.net
    Version: 2.0
    */
    
    if (!defined('BANG_THIRD_COLUMN_DEBUG'))
      define('BANG_THIRD_COLUMN_DEBUG', false);
    
    //  Initialise
    
    add_action('dbx_post_advanced', 'third_column_edit_form_init');
    function third_column_edit_form_init() {
      if (BANG_THIRD_COLUMN_DEBUG) do_action('log', 'Third column: Initialise edit form');
    
      // the JS and CSS
      add_action('admin_enqueue_scripts', 'third_column_enqueue_scripts');
    
      // the actual sidebar writers
      add_action('edit_form_top', 'third_column_edit_form_top', 10, 1);
      add_action('edit_form_after_title', 'third_column_edit_form_after_title', 10, 1);
      add_action('edit_form_after_editor', 'third_column_edit_form_after_editor', 10, 1);
      add_action('dbx_post_sidebar', 'third_column_dbx_post_sidebar', 10, 1);
    }
    
    function third_column_enqueue_scripts () {
      //  change the screen options
      add_screen_option('layout_columns', array('max' => 3, 'default' => 3) );
       add_screen_option('mini_columns', array('max' => 3, 'default' => 3, 'label' => 'Mini columns') );
    
      // add scripts and styles
      wp_enqueue_style('third-column', plugins_url('admin.css', __FILE__));
      wp_enqueue_script('third-column', plugins_url('scripts/third-column.js', __FILE__));
    }
    
    /* Edit form */
    
    function third_column_edit_form_top($post) {
    }
    
    function third_column_edit_form_after_title($post) {
    }
    
    function third_column_edit_form_after_editor($post) {
      ?>
      <div id='postbox-subcols'>
    	<div id="postbox-container-left" class="postbox-container">
    	  <?php do_meta_boxes(null, 'left', $post); ?>
    	</div>
    	<div id="postbox-container-right" class="postbox-container">
    	  <?php do_meta_boxes(null, 'right', $post); ?>
    	</div>
      </div>
      <?php
    }
    
    function third_column_dbx_post_sidebar($post) {
      $post_type = $post->post_type;
    
      ?><div id="postbox-container-3" class="postbox-container">
    	<?php
    	  do_meta_boxes($post_type, 'column3', $post);
    	?>
      </div>
      <?php
    }
    
    // add_action('submitpost_box', 'third_column_edit_form');
    // add_action('submitpage_box', 'third_column_edit_form');
    function third_column_edit_form() {
      global $post;
      $post_type = $post->post_type;
      //  check post types
      $side_meta_boxes2 = do_meta_boxes($post_type, 'column3', $post);
    
      /*  Obscure case:
       *  The taxBox javascript is only initialised if the page loads with a tax box within
       *  #side-sortables, #normal-sortables or #advanced-sortables
       *  Since we're adding an unanticipated #column3-sortables, we need to force it to initialise.
       */
      ?><script type='text/javascript'>
    	jQuery(document).ready(function($) {
    	  var toInit = false;
    	  $('#column3-sortables div.postbox').each(function(){
    		if ( this.id.indexOf('tagsdiv-') === 0 ) {
    		  toInit = true;
    		}
    	  });
    	  $('#side-sortables, #normal-sortables, #advanced-sortables').children('div.postbox').each(function(){
    		if ( this.id.indexOf('tagsdiv-') === 0 ) {
    		  toInit = false;
    		}
    	  });
    	  tagBox.init();
    	});
      </script><?php
    }

    Файл стилей admin.css

    #post-body.columns-3 {
    	margin-right: 600px;
    	position: relative
    }
    
    #post-body.columns-3 #postbox-container-1 {
    	float: right;
    	width: 280px;
    	margin-right: -300px
    }
    
    #post-body.columns-3 #postbox-container-3 {
    	position: absolute;
    	top: 0;
    	right: -600px;
    	width: 280px
    }
    
    #postbox-subcols:after {
    	clear: both;
    	height: 0;
    	width: 0
    }
    
    #poststuff #postbox-container-left {
    	width: 50%;
    	float: left
    }
    
    #poststuff #postbox-container-right {
    	width: 50%;
    	float: right
    }
    
    #poststuff #left-sortables {
    	padding-right: 10px
    }
    
    #poststuff #right-sortables {
    	padding-left: 10px
    }
    
    .sortable-bump {
    	min-height: 100px;
    	padding-bottom: 50px
    }

    Файл JS скриптов third-column.js

    jQuery(function ($) {
      if ($('#adv-settings .columns-prefs-3 input').is(':checked')) {
    	$('#post-body').removeClass('columns-2').addClass('columns-3');
      }
    
      $('#left-sortables, #right-sortables, #column3-sortables').on('sortactivate', function(event, ui) {
    	$(this).addClass('sortable-bump');
      }).on('sortdeactivate', function(event, ui) {
    	$(this).removeClass('sortable-bump');
      });
    });

    Плагину 2 года уже, возможно есть смысл подумать над его модернизацией. Только что модернизировать при беглом взгляде я не увидел.

    Kama 2 года назад

    Проверил, решение что надо smile единственное в начало плагина можно добавить:

    if( ! is_admin() ) return;
    Kama 2 года назад

    Залез в плагин, подправил его немного:

    1. выключил для фронта
    2. дополнил стили, так чтобы можно было перетащить метабоксы в те два контейнера, которые находятся сразу после редактора текста. А их а то вообще не видно и ничего про них не слышно, а вроде бы удобная шутка!
    3. удалил пустые папки из плагина, закомментил неиспользуемый код...
    4. убрал лишние пробелы из-за которых плагин вызывал ошибки, при сохранении записи.

    Вот она новая версия: Third Column (kama-fix)

    campusboy 2 года назад

    Там ещё при скачивании с репозитория почему-то в начале кода плагина два пустых символа, которые ломают RSS и подобное что к headers критичны.

    Что-то я подумал, что раз хук admin_enqueue_scripts, то будет только в админке выводиться.

    Насчёт 2 пункта - у меня и без фиксов работает, прикрепляется сразу после контента при необходимости, причем в 2 столбца можно smile Итого как будто 4 колонки.

    Спасибо за доработки, сейчас перезалью себе. Может в репозиторий кинешь? Фишка репозитория - добавляешь в Любимые, потом заходишь в админку и сразу всё ставишь что надо, не нужно по фтп мутить воду.

    Kama 2 года назад

    Ну как-то не хочется возиться smile Еще и 90% кода не мой... Посмотрим, может кину. Пока время нет особо...

    А плагин мне понравился, маленький и очень удобный... Прям как я люблю smile

    Kama 2 года назад

    Не сложно:

    1. сабмитишь плагин, если его принимают тебе дают ссылку на каталог.
    2. ставишь систему управления версиями tortoise SVN, настраиваешь.
    3. обновляешь через эту систему плагин.

    Ну конечно там надо разобраться что к чему, как работает система. В целом - это вот эти 3 пункта.

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