Как избежать пустых заголовков, автоматически создавая их из текста

Как избежать пустых заголовков, автоматически создавая их из текста | n-wp.ru

Если вы забыли ввести заголовок, то WordPress все равно позволит вам сохранить запись. Сейчас же, при современных форматах записей (например, статус, чат, аудио, видео) и вовсе отпадает надобность в заголовках, а в некоторых темах заголовки таких форматов записей и вовсе не отображаются. Однако если посмотреть RSS, то там такие записи невозможно как-то идентифицировать. Чтобы избежать создания записей без названий, можно внедрить в блог функцию, которая автоматически будет формировать название поста, исходя из его содержимого.

Как избежать пустых заголовков, автоматически создавая их из текста

Для этого откройте файл functions.php и вставьте в него по порядку несколько функций:

Создания заголовка

function tp_the_title( $before = '

', $after = '

', $echo = true ) { global $post; $temp = $post; $t = apply_filters( 'the_title', $temp->post_title ); $title = $temp->post_title; $content = $temp->post_content; $pos = 0; $out = ''; $content = trim( $content ); $title = trim( $title ); $title = preg_replace( '/...$/', '', $title ); $title = str_replace( "n", ' ', $title ); $title = str_replace( ' ', ' ', $title); $content = str_replace( "n", ' ', strip_tags( $content) ); $content = str_replace( ' ', ' ', $content ); $content = trim( $content ); $title = the_title(); if ( false !== strpos( $title, 'http' ) ) { $split = @str_split( $content, strpos( $content, 'http' ) ); $content = $split[0]; $split2 = @str_split( $title, strpos( $title, 'http' ) ); $title = $split2[0]; } if ( '' == $title ) return false; $pos = strpos( $content, $title ); if ( false === $pos || 0 < $pos ) { if ( is_single() ) $out = $before . $t . $after; else $out = $before . 'ID ) . '">' . $t . ' ' . $after; if ( $echo ) echo $out; else return $out; } return false; }

Ограничение длины заголовка

function tp_title_from_content( $content ) {
	$title = tp_excerpted_title( $content, 8 );
	return $title;
}

Исключение шорткодов и разметки HTML и PHP

function tp_excerpted_title( $content, $word_count ) {
	$content = strip_tags( $content );
	$content = preg_replace 
    ( 
    '#([).+?(])#is', 
    '', 
    $content
    ); 
	$words = preg_split( '/([s_;?!/()[]{}rnt"]|.$|(? $word_count ) {
		array_pop( $words ); // remove remainder of words
		$content = implode( ' ', $words );
		$content = $content . '...';
	} else {
		$content = implode( ' ', $words );
	}

	$content = trim( strip_tags( $content ) );

	return $content;
}

Сохранение поста с названием

function tp_fix_empty_titles( $post_ID, $post ) {

	if ( empty( $post->post_title ) ) {
		$post->post_title = tp_title_from_content( $post->post_content );
		$post->post_modified = current_time( 'mysql' );
		$post->post_modified_gmt = current_time( 'mysql', 1 );
		return wp_update_post( $post );
	}

}
add_action( 'save_post', 'tp_fix_empty_titles', 10, 2 );

Если вы не ввели название поста, то этот набор функций создаст его из содержимого поста. Предварительно содержимое будет очищено от шорткодов, разметки HTML и PHP, и ограничено определенной длиной. Чтобы было видно, что название поста создано автоматически, в конец его добавляется многоточие. Таким образом в название поста попадет чистый текст, даже если в содержимом поста вы используете картинки и видео. Все эти операции происходят во время сохранения поста, поэтому в базу данных записывается уже чистый заголовок.

Автор tiaurus 2182 Articles
Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

5 Комментарии

  1. Доброго времени суток! Отличная статья! А есть возможность при публикации записи в название записи писать ID записи? Если да то подскажите как это сделать. Спасибо!

    • Не понятно, зачем посетителям видеть ID поста. Попробуйте изменить последний код на такой:

      function tp_fix_empty_titles( $post_ID, $post ) {
       
      	if ( empty( $post->post_title ) ) {
      		$post->post_title = $post->ID ." — ".tp_title_from_content( $post->post_content );
      		$post->post_modified = current_time( 'mysql' );
      		$post->post_modified_gmt = current_time( 'mysql', 1 );
      		return wp_update_post( $post );
      	}
       
      }
      add_action( 'save_post', 'tp_fix_empty_titles', 10, 2 );
      

      Перед названием поста должен появиться его ID. Могу ошибиться, так как я совсем не программист.

      • Доброго! Спасибо за вариант! Он работает, но не совсем так как надо) я тоже тот еще программист) Суть в том что бы в заголовок записи записывался ID записи. В Вашем варианте он записывается но при условии того что есть контент…
        А мне нужно просто что бы был ID без ничего)))
        Вот это я не понимаю как сделать)
        Нужно это для того что бы можно было публиковать записи без заголовка, а wp в новых версиях почему то не разрешает этого делать… Очень прошу Вас помочь! Еще раз спасибо!

  2. Приветствую Вас. Очень полезное решение, но к сожалению в коде имеются ошибки и выдает 500.

  3. Не работает. Вставил код “последовательно”. Что не так делаю? Нужно автоматически добавлять название клипа.

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*