Что нового?

Кастомизация админки

lena1

クリエイター
<b>Админка (консоль)</b> — очень важная часть блога на WordPress. По сути, она позволяет вам управлять постами, дизайном сайта и ещё кучей вещей. При создании сайта для клиента очень важна возможность контролировать админку (чтоб клиент не «напортачил»). В этой статье я покажу вам 10 крайне важных WordPress хаков для панели управления блогом.

<!--sizeo:4--><span style="font-size:14pt;line-height:100%"><!--/sizeo-->Удалить лишние пункты меню<!--sizec--></span><!--/sizec-->

Когда вы создаёте блог на WordPress для клиента, неплохо было бы запретить ему доступ к лишним вещам. Всё это нужно лишь для удобства клиента, вдруг он случайно удалит тему, за которую он вам заплатил?

Просто вставьте следующий код в файл <u>functions.php</u> вашей темы. Пример, расположенный ниже, удалит все пункты меню, обозначенные в массиве <b>$restricted</b>

<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->function remove_menus () {
global $menu;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$restricted = array(__('Dashboard'), __('Posts'), __('Media'), __('Links'), __('Pages'), __('Appearance'), __('Tools'), __('Users'), __('Settings'), __('Comments'), __('Plugins'));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end ($menu);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (prev($menu)){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$value = explode(' ',$menu[key($menu)][0]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}
add_action('admin_menu', 'remove_menus');<!--c2--></div><!--ec2-->

<!--sizeo:4--><span style="font-size:14pt;line-height:100%"><!--/sizeo-->Добавить собственный логотип на страницу входа<!--sizec--></span><!--/sizec-->

Конечно, это не имеет никакой практической пользы, юзабилити это не улучшит, но все клиенты будут рады видеть их собственный логотип на странице входа в админку блога.

Реализовать это можно плагином «<i>The Custom admin branding</i>», но лучше будет, если вы просто вставите код, написанный ниже в файл <u>functions.php</u>

<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->function my_custom_login_logo() {
&nbsp;&nbsp;&nbsp;&nbsp;echo '<style type="text/css">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h1 a { background-image:url('.get_bloginfo('template_directory').'/images/custom-login-logo.gif) !important; }
&nbsp;&nbsp;&nbsp;&nbsp;</style>';
}

add_action('login_head', 'my_custom_login_logo');<!--c2--></div><!--ec2-->

<!--sizeo:4--><span style="font-size:14pt;line-height:100%"><!--/sizeo-->Изменить логотип внутри админки<!--sizec--></span><!--/sizec-->

В общем-то, как и изменение логотипа на странице логина, данный хак будет приятным для вашего клиента. Будет ощущение того, что сделано это именно для клиента (хотя и на самом деле это так).

Как обычно, скопируйте код в файл <u>functions.php</u>

<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->add_action('admin_head', 'my_custom_logo');

function my_custom_logo() {
&nbsp;&nbsp; echo '<style type="text/css">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #header-logo { background-image: url('.get_bloginfo('template_directory').'/images/custom-logo.gif) !important; }</style>';
}<!--c2--></div><!--ec2-->

<!--sizeo:4--><span style="font-size:14pt;line-height:100%"><!--/sizeo-->Выключить сообщение «Ваша версия WordPress устарела, обновите её»<!--sizec--></span><!--/sizec-->

Новые версии WordPress выпускаются очень часто. По очевидным соображениям безопасности, вы всегда должны обновляться. Но на клиентском сайте отключение сообщения о просьбе обновиться до актуальной версии может быть хорошим решением. Зачем вашему клиенту знать о нужных обновлениях, зачем ему лишние волнения? Это всё дело разработчика.

Ещё разок, ничего сложного: скопируйте код в ваш файл <u>functions.php</u>

<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->if ( !current_user_can( 'edit_users' ) ) {
&nbsp;&nbsp;add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
&nbsp;&nbsp;add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
}<!--c2--></div><!--ec2-->

<!--sizeo:4--><span style="font-size:14pt;line-height:100%"><!--/sizeo-->Удалить лишние виджеты<!--sizec--></span><!--/sizec-->

Очень полезная штука введена в версии 2.7 — виджеты в панели управления. Это действительно удобно, например, можно посмотреть статистику Гугл Аналитикс, не выходя за пределы своего сайта. Но такие вещи бывают нужны не всегда, а особенно вашим клиентам, поэтому лишнее иногда нужно удалять.

Ну, вы уже знаете, что нужно делать с кодом

<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->function example_remove_dashboard_widgets() {
&nbsp;&nbsp;&nbsp;&nbsp;// Глобализируем массив метабоксов, это справедливо для всех виджетов внутри wp-admin
&nbsp;&nbsp;&nbsp;&nbsp;global $wp_meta_boxes;

&nbsp;&nbsp;&nbsp;&nbsp;// Удаляем все входящие ссылки на виджет
&nbsp;&nbsp;&nbsp;&nbsp;unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;// Вот прямо здесь удаляем
&nbsp;&nbsp;&nbsp;&nbsp;unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
&nbsp;&nbsp;&nbsp;&nbsp;unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
&nbsp;&nbsp;&nbsp;&nbsp;unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
}

// Хук внутри экшна 'wp_dashboard_setup', чтобы зарегистрировать нашу функцию
add_action('wp_dashboard_setup', 'example_remove_dashboard_widgets' );<!--c2--></div><!--ec2-->

<!--sizeo:4--><span style="font-size:14pt;line-height:100%"><!--/sizeo-->Добавить свои виджеты в админку WordPress<!--sizec--></span><!--/sizec-->

предыдущем примере я показал, как легко можно удалить нежелательные виджеты из панели управления ВордПрессом. Хорошие новости! Виджеты можно не только удалять, но и добавлять.

Хорошо прокомментированный код должен говорить сам за себя, просто вставьте его в файл <u>funtctions.php</u>, ну, в общем-то, как обычно.

<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->function example_dashboard_widget_function() {
&nbsp;&nbsp;&nbsp;&nbsp;// Показать то, что вы хотите показать
&nbsp;&nbsp;&nbsp;&nbsp;echo "Привет, мир. Я — великий виджет админки, созданный великими программистами";
}

// Создаем функцию, используя хук действия
function example_add_dashboard_widgets() {
&nbsp;&nbsp;&nbsp;&nbsp;wp_add_dashboard_widget('example_dashboard_widget', 'Пример виджета админки', 'example_dashboard_widget_function');
}
// Хук в 'wp_dashboard_setup', чтобы зарегистрировать нашу функцию среди других
add_action('wp_dashboard_setup', 'example_add_dashboard_widgets' );<!--c2--></div><!--ec2-->

<!--sizeo:4--><span style="font-size:14pt;line-height:100%"><!--/sizeo-->Изменить цвета админки WordPress<!--sizec--></span><!--/sizec-->

Ну, а если вам не нравятся стандартные цвета админки, их тоже можно изменить. Я, честно, не понимаю, зачем это, мне-то всё тут нравится, но вам, возможно, захочется добавить какой-нибудь особый стиль, соответствующий общему стилю вашего блога.

Как обычно, используйте следующий код.

<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->function custom_colors() {
&nbsp;&nbsp; echo '<style type="text/css">#wphead{background:#069}</style>';
}

add_action('admin_head', 'custom_colors');<!--c2--></div><!--ec2-->

<!--sizeo:4--><span style="font-size:14pt;line-height:100%"><!--/sizeo-->Добавить сообщения со справкой<!--sizec--></span><!--/sizec-->

Если вы создаёте сайт для клиента, а у него проблемы с пониманием некоторых вещей в панели инструментов вордпресса, проще будет добавить контекстную справку, нежели каждый раз читать сообщения с просьбами о помощи.

Стандартная фраза про файл <u>functions.php</u>
<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->function my_admin_help($text, $screen) {
&nbsp;&nbsp;&nbsp;&nbsp;// Проверим, только ли для страницы настроек это применимо
&nbsp;&nbsp;&nbsp;&nbsp;if (strcmp($screen, MY_PAGEHOOK) == 0 ) {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$text = 'Вот некоторая полезная информация, которая поможет вам разобраться с плагином...';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $text;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;// Пусть по умолчанию штуки с помощью будут и на других страницах панели управления
&nbsp;&nbsp;&nbsp;&nbsp;return $text;
}

add_action( 'contextual_help', 'my_admin_help' );<!--c2--></div><!--ec2-->

<!--sizeo:4--><span style="font-size:14pt;line-height:100%"><!--/sizeo-->Контролировать сервер прямо из админки<!--sizec--></span><!--/sizec-->

API панели управления вордпрессом позволяет делать разные интересные штуки, используя виджеты. Недавно я наткнулся на этот код, он позволяет мониторить ваш сервер непосредственно в панели управления блогом, очень удобно.

Всё как обычно

<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->function slt_PHPErrorsWidget() {
&nbsp;&nbsp;&nbsp;&nbsp;$logfile = '/home/path/logs/php-errors.log'; // Enter the server path to your logs file here
&nbsp;&nbsp;&nbsp;&nbsp;$displayErrorsLimit = 100; // The maximum number of errors to display in the widget
&nbsp;&nbsp;&nbsp;&nbsp;$errorLengthLimit = 300; // The maximum number of characters to display for each error
&nbsp;&nbsp;&nbsp;&nbsp;$fileCleared = false;
&nbsp;&nbsp;&nbsp;&nbsp;$userCanClearLog = current_user_can( 'manage_options' );
&nbsp;&nbsp;&nbsp;&nbsp;// Clear file?
&nbsp;&nbsp;&nbsp;&nbsp;if ( $userCanClearLog && isset( $_GET["slt-php-errors"] ) && $_GET["slt-php-errors"]=="clear" ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$handle = fopen( $logfile, "w" );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose( $handle );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$fileCleared = true;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;// Read file
&nbsp;&nbsp;&nbsp;&nbsp;if ( file_exists( $logfile ) ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errors = file( $logfile );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errors = array_reverse( $errors );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( $fileCleared ) echo '<p><em>File cleared.</em></p>';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( $errors ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '<p>'.count( $errors ).' error';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( $errors != 1 ) echo 's';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '.';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( $userCanClearLog ) echo ' [ <b><a href="'.get_bloginfo("url").'/wp-admin/?slt-php-errors=clear" onclick="return confirm(\'Are you sure?\');">CLEAR LOG FILE</a></b> ]';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '</p>';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '<div id="slt-php-errors" style="height:250px;overflow:scroll;padding:2px;background-color:#faf9f7;border:1px solid #ccc;">';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '<ol style="padding:0;margin:0;">';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$i = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach ( $errors as $error ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '<li style="padding:2px 4px 6px;border-bottom:1px solid #ececec;">';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errorOutput = preg_replace( '/\[([^\]]+)\]/', '<b>[$1]</b>', $error, 1 );
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( strlen( $errorOutput ) > $errorLengthLimit ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo substr( $errorOutput, 0, $errorLengthLimit ).' [...]';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo $errorOutput;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '</li>';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$i++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( $i > $displayErrorsLimit ) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '<li style="padding:2px;border-bottom:2px solid #ccc;"><em>More than '.$displayErrorsLimit.' errors in log...</em></li>';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '</ol></div>';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '<p>No errors currently logged.</p>';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '<p><em>There was a problem reading the error log file.</em></p>';
&nbsp;&nbsp;&nbsp;&nbsp;}
}

// Add widgets
function slt_dashboardWidgets() {
&nbsp;&nbsp;&nbsp;&nbsp;wp_add_dashboard_widget( 'slt-php-errors', 'PHP errors', 'slt_PHPErrorsWidget' );
}
add_action( 'wp_dashboard_setup', 'slt_dashboardWidgets' );<!--c2--></div><!--ec2-->

<!--sizeo:4--><span style="font-size:14pt;line-height:100%"><!--/sizeo-->Удалить виджеты только для некоторых пользователей (групп)<!--sizec--></span><!--/sizec-->

Если вы владеете мультипользовательским блогом, согласитесь, было бы неплохо скрыть от некоторых групп конфиденциальную информацию. Ну, или просто не нужную.

Следующий код удалит метабокс postcustom для авторов (роль 2 “author”). Скопируйте код в файл <u>functions.php</u>

<!--c1--><div class='codetop'>Код</div><div class='codemain'><!--ec1-->function customize_meta_boxes() {
&nbsp;&nbsp;&nbsp;&nbsp; //retrieve current user info
&nbsp;&nbsp;&nbsp;&nbsp; global $current_user;
&nbsp;&nbsp;&nbsp;&nbsp; get_currentuserinfo();

&nbsp;&nbsp;&nbsp;&nbsp; //if current user level is less than 3, remove the postcustom meta box
&nbsp;&nbsp;&nbsp;&nbsp; if ($current_user->user_level < 3)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;remove_meta_box('postcustom','post','normal');
}

add_action('admin_init','customize_meta_boxes');<!--c2--></div><!--ec2-->
 

Rodger

-=типⒶ пⒶнк=-
Что-то мн подсказывает, что это все слетит при первом же обновлении
 

lena1

クリエイター
не... это ж не правка кода в файлах, а дополнение в файл - <b>functions.php</b>
 

Rodger

-=типⒶ пⒶнк=-
при обновлении движка, этот файл же тоже обновляется (при чем мне кажется что в первую очередь)
 

lena1

クリエイター
этот файл в папке с этом... ни каким боком он не обновляется :pinch:
 

Rodger

-=типⒶ пⒶнк=-
Ну ладно тебя, чего уж там, знаю что в папке с темой валяется такой файлик
 
Сверху