我目前在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"]" />
正如您所看到的,我的联系页面上只有一个联系表单,看起来我需要在脚本中添加一个过滤器,以便它忽略脚本标签和短代码,并且它将放置主页描述
如何解决此问题?
答案 0 :(得分:0)
如果您使用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);
}
}
}
答案 1 :(得分:0)
你经常跳进和跳出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-7 id=\"25\" title=\"Contact\"]
。无论如何,这是一个非常糟糕的描述 - 你真正想要什么呢?
还要注意你是使用UTF-8还是单字节编码,例如Latin-1,这在使用substr()时变得很重要(你不想在多字节UTF中间切割 - 8个字符)。此外,如果您要添加省略号(...),则需要132个字符,而不是135个。
答案 2 :(得分:0)
我做了类似的事情,有条件地摘录并使用它作为描述如果观众在一个帖子页面&amp;有摘录。这是代码:
<?php
if (is_single() && $post->post_excerpt != “”) {
$post = $wp_query->post;
$descrip = strip_tags($post->post_excerpt);
echo ‘<meta name=”description” content=”‘.$descrip.’”>’;
}
?>
我还写了blog post详细说明了整件事。