修改Wordpress插件以添加元描述

时间:2015-07-10 09:48:29

标签: php wordpress

我手边有一个非常简单的插件,可以为博客添加元描述。我稍微修改了它以显示OpenGraph协议和Dublin Core中的描述。这很容易。

但是我在搜索结果中发现每个页面都显示了描述。

现在我想添加一条规则,告诉插件是否在Posting中,它应该只显示the_excerpt。

我的想法是简单地添加一些规则并随之而去。但我不得不发现插件是用<来调用的。 ?php wp_head(); ? > 因为我总是先尝试一下我检查了插件,似乎我找到了一种方法来改变来自

的电话
add_action( 'wp_head', 'vsmd_meta_description' );

add_action( 'wp_head_desc', 'vsmd_meta_description' );

现在我添加<头>一个新的电话< ?php wp_head_desc(); ? >检查它是否有效,定义规则

<?php
if ( is_single() ) {
  echo '<meta name="description" content="<?php the_excerpt(); ?>" />'."\n";
  echo '<meta name="DC.Description" content="<?php the_excerpt(); ?>" />'."\n";
  echo '<meta property="og:description" content="<?php the_excerpt(); ?>" />'."\n";
} elseif ( is_front_page() ) {
  echo '<?php wp_head_desc(); ?>';
} else {
  echo '';
}
?>

快乐。 嗯,这并不是那么容易,因为它只在Source中显示&lt; ?php wp_head_desc(); ? &GT;所以我感到很茫然,因为我所发现的只是一些关于钩子的东西,我完全不理解。 我所意识到的是,我对插件add_action的更改确实将其从&lt; ?php wp_head(); ? &GT; ..所以我相信我接近成就,但现在我不知道如何完成它。

有人可以告诉我如何调用插件吗?

请 Caylean

2 个答案:

答案 0 :(得分:1)

只需将 add_action( 'wp_head', 'vsmd_meta_description_new' ); function vsmd_meta_description_new(){ if ( is_single() ) { echo '<meta name="description" content="<?php the_excerpt(); ?>" />'."\n"; echo '<meta name="DC.Description" content="<?php the_excerpt(); ?>" />'."\n"; echo '<meta property="og:description" content="<?php the_excerpt(); ?>" />'."\n"; } elseif ( is_front_page() ) { // code here } else { echo ''; } } 更改为

即可
{{1}}

答案 1 :(得分:0)

感谢Arshid KV向我展示了如何编辑插件我能够得到我想要的东西。这不是完美的方式,但工作得很好。

我使用了WP插件非常简单的元描述,因为我想只有描述而没有所有的SEO Hokus Pokus你可以使用许多其他插件。

插件需要从

重写
// include meta description in header 
function vsmd_meta_description() {
    $vsmd_meta = esc_attr( get_option( 'vsmd-setting' ) );
    $vsmd_descr = get_bloginfo( 'description' );
    if (empty($vsmd_meta)) {
        echo '<meta name="description" content="'.$vsmd_descr.'" />'."\n";
        echo '<meta name="DC.Description" content="'.$vsmd_descr.'" />'."\n";
        echo '<meta property="og:description" content="'.$vsmd_descr.'" />'."\n";
    }
    else {
        echo '<meta name="description" content="'.$vsmd_meta.'" />'."\n";
        echo '<meta name="DC.Description" content="'.$vsmd_meta.'" />'."\n";
        echo '<meta property="og:description" content="'.$vsmd_meta.'" />'."\n";
    }
}

// include meta description in header 
function vsmd_meta_description() {
    $vsmd_meta = esc_attr( get_option( 'vsmd-setting' ) );
    $vsmd_descr = get_bloginfo( 'description' );
    if ( is_single() ) {
    echo '';
    } elseif ( is_front_page() ) {
    echo '<meta name="description" content="'.$vsmd_meta.'" />'."\n";
    echo '<meta name="DC.Description" content="'.$vsmd_meta.'" />'."\n";
    echo '<meta property="og:description" content="'.$vsmd_meta.'" />'."\n";
    } else {
    echo '';
    }
}

因为它现在只显示了Frontpage上的描述,但在Postings或其他网站中没有更多。 在那之后我不得不在Header中编辑一下,用规则和the_excerpt调出所需的Postings描述,一段时间之后有效但还需要更多调整以避免使用简单创建的任何unnessasary标签和链接&LT; ?php the_excerpt(); ? &GT; 所以在最后,我有修改过的插件文件和&lt;头&gt;之后的部分&lt; ?php wp_head(); ? &GT;我添加了我的规则:

<?php if ( (is_page()) || (is_single()) ) : if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?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.'"   />'."\n";
echo '<meta name="DC.Description" content="'.$descrip.'" />'."\n";
echo '<meta property="og:description" content="'.$descrip.'" />'."\n";
?>
<?php endwhile; endif; elseif(is_home()) : ?>
<?php endif; ?>

现在它完全符合我的要求。

如果我能在插件中使用摘录,那么它可能会变得更漂亮,因为它会减少必须要做的所需的更改,但至少它现在正在工作,这就是我想要的。

请 Caylean