Описание условного метатега Wordpress

В настоящее время я использую код условного метатега в wordpress. Все работает нормально, кроме некоторых страниц.

код в header.php:

<meta name="description" content="<?php echo metadesc($post->ID); ?>" />
<?php }else{ ?>
<meta name="description" content="<?php bloginfo('description'); ?>" />
<?php } ?>

код в functions.php:

function metadesc($pid) {
$p = get_post($pid);
$description = strip_tags($p->post_content);
$description = str_replace ("\n","",$description);
$description = str_replace ("\r","",$description);
if (strlen($description) > 135) {
return htmlspecialchars(substr($description,0,135) . "...");
}else{
return htmlspecialchars($description);
 }
}

Вот что он показывает, когда я иду к источнику и смотрю на описание метатега на следующих страницах:

home: (описание домашней страницы, которое определено в общих настройках Wordpress (отметьте)

биография: первые 135 символов страницы (проверить)

контакт:

 <meta name="description" content="[contact-form-7 id=&quot;25&quot; title=&quot;Contact&quot;]" />

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

Как я могу решить эту проблему?


person Eric    schedule 10.07.2013    source источник


Ответы (3)


Что делать, если вы используете функцию strip_shortcode, попробуйте эту

function metadesc($pid) {
$p = get_post($pid);
$description = strip_tags($p->post_content);
$description = str_replace ("\n","",$description);
$description = str_replace ("\r","",$description);
$description =strip_shortcodes($description  );
if(empty($description )){

return please get home page content
}
else{
if (strlen($description) > 135) {
return htmlspecialchars(substr($description,0,135) . "...");
}else{
return htmlspecialchars($description);
 }

}

}

strip_shortcodes

person M Khalid Junaid    schedule 10.07.2013
comment
я заменил ваш скрипт на свой, но потом получаю синтаксическую ошибку - person Eric; 10.07.2013
comment
поместили ли вы домашний контент в возвратите, пожалуйста, получите контент домашней страницы и какую синтаксическую ошибку вы получили - person M Khalid Junaid; 10.07.2013
comment
да, сделал это, синтаксической ошибки больше нет, но без изменений, по-прежнему: ‹meta name=description content=[contact-form-7 id=25 title=Contact] /› - person Eric; 10.07.2013

Вы слишком часто прыгаете в PHP и выходите из него, что приводит к ошибкам в коде и медленному выполнению. Перепишите свой первый код:

<?php
echo '<meta name="description" content="' .
  ((some condition)? metadesc($post->ID): bloginfo('description')) . '" />';
?>

Теперь, если ваши необработанные данные для контента [contact-form-7 id=&quot;25&quot; title=&quot;Contact&quot;], во что вы пытаетесь их превратить? Как бы вы хотели, чтобы он был переформатирован? Это происходит из функции metadesc()? Я не думаю, что объекты HTML в теге описания будут расширены до их символов, но будут использоваться как есть. Таким образом, вам может понадобиться вывести [contact-form-7 id=\"25\" title=\"Contact\"] вместо этого. Тем не менее, это очень плохое описание — что вы на самом деле хотите?

Также помните, используете ли вы UTF-8 или однобайтовую кодировку, такую ​​как Latin-1, что становится важным при использовании substr() (вы не хотите прерываться в середине многобайтового символа UTF-8) . Кроме того, если вы добавляете многоточие (...), вам нужно взять 132 символа, а не 135.

person Phil Perry    schedule 04.09.2013

Я сделал что-то подобное, условно взяв отрывок и используя его в качестве описания, если зритель находится на одной странице поста и есть отрывок. Вот код:

<?php
if (is_single() && $post->post_excerpt != “”) {
$post = $wp_query->post;
$descrip = strip_tags($post->post_excerpt);
echo ‘<meta name=”description” content=”‘.$descrip.’”>’;
}
?>

Я также написал сообщение в блоге с подробным описанием всего этого.

person Jonathan    schedule 13.12.2013