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

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

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

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

Kama 1.5 года назад

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

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

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

1
campusboy1951 1.5 года назад
  • 1
    Kama4697

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

    Делается не сложно, все завязано на хуке 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 1.5 года назад

    Спасибо, Тимур, ты меня прям приободрил! Сегодня понедельник, день тяжёлый, потому после слов о том, что надо эту идею дорабатывать, я решил уделить ещё 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 1.5 года назад

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

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

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

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

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

    campusboy 1.5 года назад

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

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

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

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

    Kama 1.5 года назад

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

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

    Kama 1.5 года назад

    Не сложно:

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

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

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