0

我目前在 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);
 }
}

这是当我转到源代码并查看以下页面上的元标记描述时显示的内容:

主页:(在 Wordpress 常规设置中定义的主页的描述(检查)

传记:页面的前 135 个字符(检查)

接触:

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

如您所见,我的联系页面上只有一个联系表单,看起来我需要向脚本添加一个过滤器,以便它忽略脚本标签和短代码,并且它将放置主页描述。

我该如何解决这个问题?

4

3 回答 3

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);
 }

}

}

strip_shortcodes

于 2013-07-10T17:47:24.570 回答
0

您经常跳进跳出 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 个字符。

于 2013-09-04T22:00:25.637 回答
0

我做了类似的事情,如果查看者在单个帖子页面上并且有摘录,则有条件地摘录并使用它作为描述。这是代码:

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

我还写了一篇博文详细介绍了整个事情。

于 2013-12-13T14:18:38.797 回答