Php Wordpress条件元标记描述

Php Wordpress条件元标记描述,php,wordpress,meta,Php,Wordpress,Meta,我目前正在wordpress中使用条件元标记代码。 除了某些页面之外,一切都很好 header.php中的代码: <meta name="description" content="<?php echo metadesc($post->ID); ?>" /> <?php }else{ ?> <meta name="description" content="<?php bloginfo('description'); ?>" />

我目前正在wordpress中使用条件元标记代码。 除了某些页面之外,一切都很好

header.php中的代码:

<meta name="description" content="<?php echo metadesc($post->ID); ?>" />
<?php }else{ ?>
<meta name="description" content="<?php bloginfo('description'); ?>" />
<?php } ?>
这是当我转到源代码并查看以下页面上的元标记描述时显示的内容:

主页:(在Wordpress常规设置(选中)中定义的主页说明)

传记:页面的前135个字符(勾选)

联系人:

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

正如您所看到的,我的联系人页面上只有一个联系人表单,看起来我需要在脚本中添加一个过滤器,这样它就可以忽略脚本标记和短代码,并将放置主页描述


如何解决此问题?

如果使用
strip\u 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);
 }

}

}

您经常跳进跳出PHP,这会导致编码错误和执行缓慢。请重写您的第一段代码:

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

现在,如果内容的原始数据是
[contact-form-7 id=“25”title=“contact”]
您想将其转换为什么?您希望看到它如何重新格式化?这来自metadesc()函数?我不认为描述标记中的HTML实体将扩展为它们的字符,但将按原样使用。因此,您可能需要输出
[contact-form-7id=\'25\'title=\'contact\']
。无论如何,这是一个非常糟糕的描述--您真正想要的是什么


也要知道你是在UTF-8还是一个单字节编码,比如LaTun-1,当使用SUBE()时,它变得很重要(你不想在多字节UTF-8字符中间砍)。,您希望使用132个字符,而不是135个字符。

我做了类似的事情,有条件地使用摘录,并将其用作描述,如果查看者位于单个帖子页面上&有一个摘录。下面是代码:

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


我还写了一篇详细介绍整个过程的文章。

我已经用我的脚本替换了你的脚本,但是我得到了一个语法错误。你把主页内容作为回报了吗?请获取主页内容和你得到的语法错误是的,没有语法错误了,但是没有更改,仍然:
<?php
if (is_single() && $post->post_excerpt != “”) {
$post = $wp_query->post;
$descrip = strip_tags($post->post_excerpt);
echo ‘<meta name=”description” content=”‘.$descrip.’”>’;
}
?>