У вас уже есть работа, выполненная в основном:
<?php
if( is_single() || is_page() ) $description = strip_tags($post->post_content);
elseif( is_category() ) $description = category_description();
else $description = get_bloginfo( 'description' );
$description = substr($description,0,150);
?>
<meta name="description" content="<?= $description ?>" />
Как вы видите, я бы забыл обо всей очистке, которую вы делаете в metadesc()
, просто избавьтесь от html с помощью strip_tags()
, но я не вижу необходимости удалять разрывы строк или переводить в html-объекты, конечно не думайте, что поисковые системы будут возражать против разрыва строки или &
или &
.
Плюс, нет необходимости проверять длину описания. Просто попытайтесь обрезать его, если его длина меньше 150 символов, substr()
вернет всю строку без изменений.
EDIT:
Отвечая на ваш комментарий, вы можете сделать это следующим образом, если вы предпочитаете использовать metadesc()
функцию, которую вы использовали:
function metadesc() {
global $post;
if( is_single() || is_page() ) $description = strip_tags($post->post_content);
elseif( is_category() ) $description = category_description();
else $description = get_bloginfo( 'description' );
$description = substr($description,0,150);
return $description;
}