Увеличение колонок в админке WordPress при публикации записи
Привет. При публикации материала в настройках экрана WordPress можно указать 1 или 2 колонки. Можно ли методами движка увеличить это количество до 3, к примеру?
Цель: много создано кастомных таксономий (публикуемый материал нужно классифицировать по различным критериям), а так как вторая (правая, узкая) колонка в таком случае превращается в длинную портянку, то хотелось бы такую же третью колонку. Экран большой, свободно позволяет разместить её.
Ответ на вопрос. Решение было найдено в процессе обсуждения и вылилось в плагин для создания дополнительных колонок при редактировании записи: Third Column (kama-fix)
Нашел отличный плагин по этой теме - Three Column Screen Layout
Можно. Вот попробовал, что-то более менее вразумительное сделать, получилось так:
Делается не сложно, все завязано на хуке
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. Ну или просто перетаскиваем туда нужные боксы, для каждого пользователя положение будет сохранено.Сложности со стилями: пробовал настроить, чтобы были две линии боксов справа. Но там контейнеры боксов перемешаны в коде, настроить быстро не получилось, возиться не стал. Под «перемешано» имею ввиду, блок контента идет первый, дальше правая полоса, дальше метабоксы под контентом и в конце наш новый контейнер. И изменить этот порядок никак нельзя, только стилями выкручиваться... Можешь попробовать стили настроить, если что получится, жду их на этой странице
Спасибо, Тимур, ты меня прям приободрил! Сегодня понедельник, день тяжёлый, потому после слов о том, что надо эту идею дорабатывать, я решил уделить ещё 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 года уже, возможно есть смысл подумать над его модернизацией. Только что модернизировать при беглом взгляде я не увидел.
Проверил, решение что надо
единственное в начало плагина можно добавить:
Залез в плагин, подправил его немного:
Вот она новая версия: Third Column (kama-fix)
Там ещё при скачивании с репозитория почему-то в начале кода плагина два пустых символа, которые ломают RSS и подобное что к headers критичны.
Что-то я подумал, что раз хук admin_enqueue_scripts, то будет только в админке выводиться.
Насчёт 2 пункта - у меня и без фиксов работает, прикрепляется сразу после контента при необходимости, причем в 2 столбца можно
Итого как будто 4 колонки.
Спасибо за доработки, сейчас перезалью себе. Может в репозиторий кинешь? Фишка репозитория - добавляешь в Любимые, потом заходишь в админку и сразу всё ставишь что надо, не нужно по фтп мутить воду.
Ну как-то не хочется возиться
Еще и 90% кода не мой... Посмотрим, может кину. Пока время нет особо...
А плагин мне понравился, маленький и очень удобный... Прям как я люблю
Не сложно:
Ну конечно там надо разобраться что к чему, как работает система. В целом - это вот эти 3 пункта.