如何防止短代码在描述中显示

时间:2014-02-19 20:06:20

标签: php wordpress

使用此代码

    <?php
$post = $wp_query->post;
$descrip = strip_tags($post->post_content);
$descrip_more = '';
if (strlen($descrip) > 155) {
$descrip = substr($descrip,0,155);
$descrip_more = ' ...';
}
$descrip = str_replace('"', '', $descrip);
$descrip = str_replace("'", '', $descrip);
$descripwords = preg_split('/[\n\r\t ]+/', $descrip, -1, PREG_SPLIT_NO_EMPTY);
array_pop($descripwords);
$descrip = implode(' ', $descripwords) . $descrip_more; 
echo '<meta name="description" content="'.$descrip.'">';
?>

在我的标题中输出的内容如下:

<meta name="description" content="[wptabs mode=horizontal background=false] [wptabtitle]     English Lyrics[/wptabtitle] [wptabcontent]Speed Circus Yeah A-yoWOO TAEWOON with the am I     ...">

我想知道我是否可以在代码中添加一些可以摆脱短代码的东西?或者其中的任何内容?

也许这样吗?

<meta name="description" content="Speed Circus Yeah A-yoWOO TAEWOON with the am I     ...">

2 个答案:

答案 0 :(得分:1)

需要做的是渲染帖子而不显示帖子内容。这里略有不同。

你应该尝试使用:

apply_filters('the_content', $post->post_content); 

而不是:

$post->post_content

当您对内容应用过滤器时,您会收到显示给用户的帖子,而$ post-&gt; post_content会显示帖子的原始内容。

答案 1 :(得分:1)

有删除短代码的功能。

https://codex.wordpress.org/Function_Reference/strip_shortcodes

将它放在echo之前:

$descrip = strip_shortcodes( $descrip );

鉴于您要在属性中输出它,您应该使用该函数来转义属性。 esc_attr()。您可以在此处找到有关此内容的更多信息:https://codex.wordpress.org/Function_Reference/esc_attr

基于您的答案留下的代码和评论的完整示例:

 <?php
$post = $wp_query->post;
$descrip = strip_tags( $post->post_content );
$descrip_more = '';
if (strlen($descrip) > 155) {
    $descrip = substr($descrip,0,155);
    $descrip_more = ' ...';
}
$descrip = str_replace('"', '', $descrip);
$descrip = str_replace("'", '', $descrip);

$descripwords = preg_split('/[\n\r\t ]+/', $descrip, -1, PREG_SPLIT_NO_EMPTY);
array_pop($descripwords);
$descrip = implode(' ', $descripwords) . $descrip_more; 
$descrip = strip_shortcodes( $descrip );

echo '<meta name="description" content="' . esc_attr( get_the_title( $post->ID ) . trim( $descrip ) ) . '">';
?>