2009年1月9日星期五

WordPress的10个杀手级Hack技巧 | WordPress啦! - 使用 Google 工具栏发送

2008年对WordPress来说是非同寻常的一年,它的软件多次更新,最终促成重大版本2.7的发布,许多网站因此也开始使用WordPress软件。一些用户在使用过程中对WordPress的代码等作了许多改进,更多WordPress用户也因此受益。

这篇文章将向大家介绍10个最新最实用的WordPress hack,它能让你的博客引擎开足马力,挣脱束缚,最大限度地为你服务。此外,每个hack还都附有相关说明,这样你不仅能让WordPress释放最大力量,还能知道如何操作。

1.只在搜索引擎结果中显示AdSense 广告

问题:众所周知,一般访问并不点击广告。广告点击率90%是来自搜索引擎的显示结果。另一个问题是Google的智能计价。智能定价意味着CTR比较低,点击率单价大打折扣。例如,如果一次点击正常获得1美元的话,Google的智能计价只会是0.1美元。郁闷吧?但是,以下的代码改进就能解决这个问题了。它只在搜索引擎结果中显示AdSense 广告,这意味着你能得到更多的点击率,更高的CTR.

解决方案:

  1. 打开主题中的functions.php文件。
  2. 粘贴进下代码:
    function scratch99_fromasearchengine(){
    $ref = $_SERVER['HTTP_REFERER'];
    $SE = array('/search?', 'images.google.', 'web.info.com', 'search.', 'del.icio.us/search', 'soso.com', '/search/', '.yahoo.');
    foreach ($SE as $source) {
    if (strpos($ref,$source)!==false) return true;
    }
    return false;
    }
  3. 把以下代码粘贴到AdSense广告显示位置的相应模板中。它只会在搜索引擎结果中显示:
    if (function_exists('scratch99_fromasearchengine')) {
    if (scratch99_fromasearchengine()) {
    INSERT YOUR CODE HERE
    }
    }

代码说明:这个改进以scratch99_fromasearchengine()函数开头,包括了用来指定搜索引擎的$SE数组变量。这样,只要把新元素加入到数组中就能轻松添加新的搜索引擎。如果使用搜索引擎搜索的访客包含了$SE数组变量,scratch99_fromasearchengine()接着就会返回true值。

2.避免在多循环中出现重复文章

问题:由于"杂志型"主题的流行,现在很多WordPressy用户在他们的首页上都使用了多个循环,因此他们也迫切需要在第二个循环上避免出现重复文章。
解决方案:使用PHP数组就能轻松解决这一问题

  1. 创建一个PHP数组,并把第一个循环的所有文章ID放在其中
    <h2>Loop n°1</h2>
    <?php
    $ids = array();
    while (have_posts()) : the_post();
    the_title();
    ?>
    <br />
    <?php $ids[]= $post->ID;
    endwhile; ?>
  2. 对于第二个循环:使用PHP函数in_array()来检查$ids数组中是否包含了某个文章ID。如果这个文章ID没有包含在此数组中,意味着第一个循环中没有此篇文章,那么系统就可以显示它了。
    <h2>Loop n°2</h2>
    <?php
    query_posts("showposts=50");
    while (have_posts()) : the_post();
    if (!in_array($post->ID, $ids)) {
    the_title();?>
    <br />
    <?php }
    endwhile; ?>

代码说明:执行第一个循环时,其中的所有文章ID都会被放到一个数组变量中。因此,第二个循环执行时,我们只要到这个数组中检查当前的文章ID是否已显示在第一个循环中就可以了。

3.用页码代替"上页"和"下页"

问题:WordPress有默认函数来显示上页和下页页面,虽然这比没有这个什么功能好,但是我不明白开发人员为什么不把页面写进核心代码呢。当然,我们可以用插件来生成页码,但是如果能把页码直接插入主题岂不更好?!
解决方案:这里使用WP-PageNavi插件把页码直接写入主题

  1. 首先下载WP-PageNavi插件
  2. 在硬盘驱动上解压插件存档,并把wp-pagenavi.php 和 wp-pagenavi.css文件上传到主题目录
  3. 打开要放置页码的文件(如index.php, categories.php, search.php,等),找到以下代码:
    <div class="navigation">
    <div class="alignleft"><?php next_posts_link('Previous entries') ?></div>
    <div class="alignright"><?php previous_posts_link('Next entries') ?></div>
    </div>
    用以下代码代替以上内容:
    <?php
    include('wp-pagenavi.php');
    if(function_exists('wp_pagenavi')) { wp_pagenavi(); }
    ?>
  4. 接着请修改插件文件。打开wp-pagenavi.php文件并找到以下代码(61行):
    function wp_pagenavi($before = '', $after = '') {
    global $wpdb, $wp_query;
    修改成:
    function wp_pagenavi($before = '', $after = '') {
    global $wpdb, $wp_query;
    pagenavi_init(); //Calling the pagenavi_init() function
  5. 最后,我们要把wp-pagenavi样式表添加到博客。
    打开header.php 文件,把以下代码添加进去:
    <linkrel="stylesheet"href="<?phpechoTEMPLATEPATH.'/pagenavi.css';?>"type="text/css"media="screen"/>

代码说明:这个代码改进直接在主题文件中加入添加了插件代码。我们另外还调用了pagenavi_init()函数以使页码能够正常显示。

4.自动获取文章图像

问题:使用自定义字段来显示和日志相关的图像固然很好,但是许多用户想直接检索并使用文章本身嵌入的图像。

解决方案: 至今为止,还没有这样的插件。值得庆幸的是,以下循环将帮我们解决这一问题:它会搜索文章内容的图像并把它们显示出来

  1. 把以下代码粘贴到主题文件任意位置:
    <?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
    <?php
    $szPostContent = $post->post_content;
    $szSearchPattern = '~<img [^\>]*\ />~';
    // Run preg_match_all to grab all the images and save the results in $aPics
    preg_match_all( $szSearchPattern, $szPostContent, $aPics );
    // Check to see if we have at least 1 image
    $iNumberOfPics = count($aPics[0]);
    if ( $iNumberOfPics > 0 ) {
    // Now here you would do whatever you need to do with the images
    // For this example the images are just displayed
    for ( $i=0; $i < $iNumberOfPics ; $i++ ) {
    echo $aPics[0][$i];
    };
    };
    endwhile;
    endif;
    ?>

代码说明:以上代码实际上包含了一个WordPress循环。使用PHP和正则表达式的唯一区别就是前者会自动搜索文章内容中的图像而不是仅仅显示文章。一旦发现图像,系统就会显示。

5.创建"发送到Twitter"按钮

问题:你是Twitter用户吗?如果是,相信你一定了解和朋友在线分享有趣内容的乐趣。那么,为什么不给你的读者也提供一个机会,让他们可以直接把你的文章URL发送到Twitter以给你带来更多流量呢?

解决方案:这个代码改进非常简单。只要创建一个带有status参数的Twitter链接就可以了。而对于WordPress,直接使用the_permalink()函数就可获取文章URL了:
<a href="http://twitter.com/home?status=Currentlyreading<?php the_permalink(); ?>" title="ClicktosendthispagetoTwitter!" target="_blank">ShareonTwitter</a>
非常简单,对吧?但它同时也非常实用!

6. 使用直引号,避免弯引号

问题:如果你经常在自己的网站上发布代码片段的话,可能会经常碰上这类问题:某用户会说你发布的代码不起作用。这是为什么呢?WordPress默认情况下会将直引号转为"smart引号,"而后者会截断代码片段。

解决方案:要避免出现这些弯引号,请按以下操作:

  1. 打开主题中的functions.php文件。如果不存在该文件的话,请自行创建一个。
  2. 粘贴进如下代码:
    <?php remove_filter('the_content', 'wptexturize'); ?> 
  3. 保存文件。大功告成!

代码说明:wptexturize()函数会自动将直引号转为smart引号。而通过使用remove_filter()函数,我们会告知WordPress不要对日志内容使用wptexturize()函数,问题自然得到解决。

7. 如无Referrer请求则禁止发表评论

问题:垃圾评论是让所有博主都头疼的问题。尽管Akismet能够帮你应付这些问题,但如果能化被动为主动岂不是更好?以下给出的代码在wp-comments-post.php被访问时,会查找referrer(即URL来源页面)。如果此时存在一个referrer,且为你博客的URL,那么就可以发表评论。反之,页面将会停止载入,而评论也就无法发表了。

解决方案:要应用此hack的话,直接将以下代码粘贴到外观主题的function.php文件中即可。如果外观主题不含此文件,请自行创建一个。

function check_referrer() {
if (!isset($_SERVER['HTTP_REFERER']) || $_SERVER['HTTP_REFERER'] == "") {
wp_die( __('Please enable referrers in your browser, or, if you\'re a spammer, bugger off!') );
}
}
add_action('check_comment_flood', 'check_referrer');

8.在WordPess导航条中使用CSS滑动门

问题:虽然内置的wp_list_pages()和wp_list_categories()函数很有用,但它们不允许嵌入<span>元素。这样一来,就只能使用目前最赞的CSS滑动门技术了。而且幸运的是,我们只要稍微借助一下PHP和正则表达式就能够在WordPress博客中使用超酷的滑动门技术了。

由于有关CSS滑动门的教程已经很多了,因此在这里我们就不对其工作方式再做任何说明。如果你想对此技术进行更深入的了解,可以看看这篇精品文章。想看看实际效果的话,请点击这里

  1. 创建你所需的图片,并对WordPress外观主题中的style.css文件进行编辑。这里给出例子:
    #nav a, #nav a:visited {
    display:block;
    }
    #nav a:hover, #nav a:active {
    background:url(images/tab-right.jpg) no-repeat 100% 1px;
    float:left;
    }
    #nav a span {
    float:left;
    display:block;
    }
    #nav a:hover span {
    float:left;
    display:block;
    background: url(images/tab-left.jpg) no-repeat 0 1px;
    }
  2. 现在让我们来编辑header.php文件吧。根据自身需要将如下代码复制粘贴进去即可:
    <ul id="nav">
    <li><a href="<?php echo get_option('home'); ?>/"><span>Home</span></a></li>
    <?php echo preg_replace('@\<li([^>]*)>\<a([^>]*)>(.*?)\<\/a>@i', '<li$1><a$2><span>$3</span></a>', wp_list_pages('echo=0&orderby=name&exlude=181&title_li=&depth=1')); ?>
    </ul>
    列出页面:
    <ul id="nav">
    <li><a href="<?php echo get_option('home'); ?>/"><span>Home</span></a></li>
    <?php echo preg_replace('@\<li([^>]*)>\<a([^>]*)>(.*?)\<\/a>@i', '<li$1><a$2><span>$3</span></a>', wp_list_categories('echo=0&orderby=name&exlude=181&title_li=&depth=1')); ?>
    </ul>

代码说明:此例中,我们在 wp_list_pages()和wp_list_categories()函数中使用了echo=0 参量,它允许你获取函数结果而无需将其直接打印在屏幕上。接着函数结果将用于PHP preg_replace()函数,并最终显示出来,此时<li>和<a>标签之间已加入了<span>标签。

9. WordPress博客百变头图

问题:确切地说这并不是什么问题,但有不少WordPress用户希望自己的博客头图能够丰富多变。

解决方案:

  1. 当你相中了一些头图图片后,将它们命名为1.jpg, 2.jpg, 3.jpg,诸如此类。当然,你可以使用任意多的图片。
  2. 将图片上传到wp-content/themes/yourtheme/images目录下。
  3. 打开header.php文件,并将如下代码粘入:
    $num = rand(1,10); //Get a random number between 1 and 10, assuming 10 is the total number of header images you have
    &ltdiv id="header" style="background:transparent url(images/.jpg) no-repeat top left;">
  4. 完成!现在博客各页面或日 志页面将会显示随机的头图了。

代码说明:这里没什么好说的。我们直接使用PHP rand()函数初始化一个$num变量来随机获取1到10之间的数字。接着我们将$num变量的结果连上当前外观主题的路径就OK了。

10.显示撰写计划

问题:许多博主都希望自己拥有更多的读者,有更多的RSS feed。而把文章撰写计划罗列出来显然能提高访客的好奇心和兴趣。

解决方案:打开任意一个主题文件并粘贴进以下代码:
<?php
$my_query=newWP_Query('post_status=future&order=DESC&showposts=5');
if($my_query->have_posts()){
while($my_query->have_posts()):$my_query->the_post();?>
<li><?phpthe_title();?></li>
<?phpendwhile;
}
?> 

代码说明:在这个代码改进中,我们使用WP_Query类创建了自定义语句以发送数据库查询并提取最近将要撰写的五篇文章。完成后,系统就会使用一个简洁的WordPress循环来显示文章标题。

作者:Jean-Baptiste Jung
翻译:stonedoreen@WordPress啦!

没有评论: