Как создать дополнительное статусное сообщение к постам

Как создать дополнительное статусное сообщение к постам | n-wp.ru Настройки

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

Как создать дополнительное статусное сообщение к постам

Чтобы добавить дополнительные статусные сообщения к постам, которые авторы, редакторы и администраторы будут видеть в административной части в разделе записей рядом с названием каждого поста, откройте файл functions.php, и вставьте в него примерно такой код:

add_filter( 'display_post_states','custom_post_state');
function custom_post_state( $states ) {
	global $post;
	$show_custom_state = get_post_meta( $post->ID, '_status' );
	   if ( $show_custom_state ) {
		$states[] = __( '<span class="custom_state '.strtolower($show_custom_state[0]).'">'.$show_custom_state[0].'</span>' );
		}
	return $states;
}
add_action( 'post_submitbox_misc_actions', 'custom_status_metabox' );
function custom_status_metabox(){
	global $post;
	$custom  = get_post_custom($post->ID);
	$status  = $custom["_status"][0];
	$i   = 0;
	/* ----------------------------------- */
	/*   Array of custom status messages            */
	/* ----------------------------------- */
	$custom_status = array(
			'Spelling',
			'Review',
			'Errors',
			'Source',
			'Rejected',
			'Final',
		);
	echo '<div class="misc-pub-section custom">';
	echo '<label>Custom status: </label>';
	echo 'Custom status';
	echo '-----------------';
	for($i=0;$i<count($custom_status);$i++){
		if($status == $custom_status[$i]){
		    echo ''.$custom_status[$i].'';
		  }else{
		    echo ''.$custom_status[$i].'';
		  }
		}
	echo '';
	echo '<br /></div>';
}
add_action('save_post', 'save_status');
function save_status(){
	global $post;
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){ return $post->ID; }
	update_post_meta($post->ID, "_status", $_POST["status"]);
}
add_action( 'admin_head', 'status_css' );
function status_css() {
	echo '
	.default{font-weight:bold;}
	.custom{border-top:solid 1px #e5e5e5;}
	.custom_state{
		font-size:9px;
		color:#666;
		background:#e5e5e5;
		padding:3px 6px 3px 6px;
		-moz-border-radius:3px;
		}
		/* ----------------------------------- */
		/*   вы можете изменить цвета выделения  */
		/* ----------------------------------- */
		.spelling{background:#4BC8EB;color:#fff;}
		.review{background:#CB4BEB;color:#fff;}
		.errors{background:#FF0000;color:#fff;}
		.source{background:#D7E01F;color:#333;}
		.rejected{background:#000000;color:#fff;}
		.final{background:#DE9414;color:#333;}
		';
}

Дополнительные статусы позволят упростить работу с авторами, да и вам сразу будет понятно, какую работу нужно проделать в посте.

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. lev19888

    А как можно русифицировать эту функцию?
    Т.е., чтобы вместо слов spelling, reviev, error выводились русские слова?

    Ответить
  2. lev19888

    Т.е., понятно, что можно написать на их месте русские буквы, но при этом надо сохранить вывод css свойств. Если я напишу вместо слова rejected слово «удалить», то у меня и css свойство будет «.удалить», а не .rejected, а русские символы css не учитывает

    Ответить
    1. tiaurus автор

      Можно попробовать так — заменить перебор статусов на статусы с точным определением. Код, начиная с 31 cтрочки:

          for($i=0;$i<count($custom_status);$i++){
              if($status == Spelling){
                  echo '<option value="'.$custom_status[$i].'" selected="true">проверить орфографию</option>';
              }elseif($status == Review){
                  echo '<option value="'.$custom_status[$i].'">просматривается</option>';
              }
              }elseif($status == Errors){
                  echo '<option value="'.$custom_status[$i].'">исправить ошибки</option>';
              }
              }elseif($status == Source){
                  echo '<option value="'.$custom_status[$i].'">указать источник</option>';
              }
              }elseif($status == Rejected){
                  echo '<option value="'.$custom_status[$i].'">отклонен</option>';
              }
              }elseif($status == Final){
                  echo '<option value="'.$custom_status[$i].'">окончательный вариант</option>';
              }
              }else{
                  echo '<option value="'.$custom_status[$i].'">'.$custom_status[$i].'</option>';
              }                
          }
      
      Ответить
  3. Евгений

    Здравствуйте! А возможно ли изменять данные статусы через frond end, т.е. сразу через сайт? Заранее спасибо за ответ!

    Ответить
    1. tiaurus автор

      Нет.

      Ответить