我目前在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="25" title="Contact"]" />
正如您所看到的,我的联系页面上只有一个联系表单,看起来我需要在脚本中添加一个过滤器,以便它忽略脚本标签和短代码,并且它会放置主页描述 .
我该如何解决这个问题?
3 回答
如果你使用
strip_shortcode
函数怎么办试试这个strip_shortcodes
你经常跳进和跳出PHP,这会导致编码错误和执行缓慢 . 重写你的第一个代码:
现在,如果您的内容的原始数据是
[contact-form-7 id="25" title="Contact"]
,您要将其转换为什么?您希望如何重新格式化?这来自metadesc()函数?我不认为描述标记中的HTML实体将扩展为其字符,但将按原样使用 . 因此,您可能需要输出[contact-form-7 id=\"25\" title=\"Contact\"]
. 无论如何,这是一个非常糟糕的描述 - 你真正想要的是什么?还要注意你是使用UTF-8还是单字节编码,例如Latin-1,这在使用substr()时变得很重要(你不想在多字节UTF-8字符的中间切断) . 此外,如果您要添加省略号(...),则需要132个字符而不是135个字符 .
我做了类似的事情,有条件地摘录并使用它作为描述如果 Spectator 在一个帖子页面上有一个摘录 . 这是代码:
我还写了一篇blog post详细说明了整件事 .