开源博客平台WordPress今天十岁啦!

164832a05e9017bbf

开源博客平台 WordPress 今天十岁啦!

2003 年,WordPress 刚刚诞生之时,它的愿景不过是成为人们发布文章的简易工具。而如今,很多出版界的巨头都在使用 WordPress,这其中包括 CNN,GigaOM,TechCrunch,VentureBeat 等等(36 氪之前也是用的 WordPress)。WordPress 平台上有超过 6600 万站点。WordPress 估计是过去十年中改变出版界最重要的工具。

当 WordPress 的开源平台持续兴盛时,母公司 Automattic持有的收费版博客寄存站点WordPress.com也毫不逊色。WordPress 及 Automattic 的联合创始人 Matt Mullenweg 近期宣布Automattic在二级交易市场融资5000万美元,这笔巨额资金将帮助 WordPress 巩固其领先地位。

接下来就通过 Statista 准备的信息图,看看 WordPress 在过去十年的发展情况吧:
8644098199675decf

2013年优秀免费的WordPress主题

如今的Wordpress已经不是单纯的博客程序,随着Wordpress插件的日益增长,Wordpress已经成为一款综合性的CMS后台,你可以用它来搭建博客,也可以用它来搭建公司网站、产品网站甚至电子商务网站

1. Lensa

9c217b866e7ebbc2a

2. Folly

980bf9dffd8f1aaef

3. Koresponsive

49e3de152bf26029c

4. Gadgetry

68adb56eff17088fb

5. Photo

355fe42b5444bac54

6. Workality

3fe5af966e6660715

7. Clean Retina

fb0d740f3f4e08e1c

8. Curiosity

26bf65027945cb79e

9. Thoughts

c43aa1c6fc181a7b0

10. Great

ffb36d1be6bc0519b

以上Wordpress主题均是免费的Wordpress主题。

WordPress给文章里的URL地址自动生成超链接

在WordPress里写文章的时候,有时候会需要添加一些URL地址,比如outsiderla.me。

但是WordPress并不能自动识别这个地址,所以显示给读者的只是一个普通文本形式的URL地址,通常我们需要通过所见即所得编辑器来给这个地址添加超链接。

不过实际上WordPress提供了一个可识别URL地址的函数——make_clickable,只要激活这个函数,当你再次输入URL地址时,读者看到的就是一个带有超链接的URL地址了。

打开functions.php文件,在里面加上:

add_filter('the_content', 'make_clickable');

函数就激活成功了。这个函数可以将URI、www、ftp以及E-mail地址转换成超链接形式。

WordPress上传文件自动重命名

用过wordpress的应该都知道如果我们上传的文件的名字中有中文,上传到linux服务上后发现会是乱码,所以有必要把上传的文件做一个自动重命名…这样也会方便我们管理

在functions.php中加入以下代码:

function new_filename($filename) {
    $info = pathinfo($filename);
    $ext = empty($info['extension']) ? '' : '.' . $info['extension'];
    $name = basename($filename, $ext);
    return md5($name) . $ext;
}
 
add_filter('sanitize_file_name', 'new_filename', 10);

添加保存之后,就可以实现了文件的自动更名,自动生成的是一个32个的md5加密的文件名,如果你认识32位的文件名太长了
你可以使用 substr()来截取你想要的长度,代码如下,我使用的是15位

function new_filename($filename) {
    $info = pathinfo($filename);
    $ext = empty($info['extension']) ? '' : '.' . $info['extension'];
    $name = basename($filename, $ext);
    return substr(md5($name), 0, 15) . $ext;
}
 
add_filter('sanitize_file_name', 'new_filename', 10);

WordPress 调用特定分类下的标签

新不了情 — 萧敬腾

有时候我们想要获得特定的一个分类或者多个分类下的标签
可以在当前主题的Functions.php文章中添加以下代码

    function get_category_tags($args) {
    global $wpdb;
    $tags = $wpdb->get_results
    ("
    SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name, null as tag_link
    FROM
    wp_posts as p1
    LEFT JOIN wp_term_relationships as r1 ON p1.ID = r1.object_ID
    LEFT JOIN wp_term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
    LEFT JOIN wp_terms as terms1 ON t1.term_id = terms1.term_id,
 
    wp_posts as p2
    LEFT JOIN wp_term_relationships as r2 ON p2.ID = r2.object_ID
    LEFT JOIN wp_term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
    LEFT JOIN wp_terms as terms2 ON t2.term_id = terms2.term_id
    WHERE
    t1.taxonomy = 'category' AND p1.post_status = 'publish' AND terms1.term_id IN (".$args['categories'].") AND
    t2.taxonomy = 'post_tag' AND p2.post_status = 'publish'
    AND p1.ID = p2.ID
    ORDER by tag_name
    ");
    $count = 0;
    foreach ($tags as $tag) {
    $tags[$count]->tag_link = get_tag_link($tag->tag_id);
    $count++;
    }
    return $tags;
    }

添加保存之后直接可以调用以下函数来获得相应分类下的标签

$args = array('categories' => '64');
$tags = get_category_tags($args);
 foreach ($tags as $tag) {
        echo "<a href=" . $tag->tag_link . ">" . $tag->tag_name . "</a>";
    }

WordPress 用query_posts分页失效解决的方法

听海

query_post的功能的确强大,可以使用它来自定义你想要调用的文章,现在要说的是通过它来实现文章的分页,在我的主题中我后台设置的是每一页10篇文章,但在我图片这个分类中我想显示9张图片,这就要用到以下代码

<?php
 query_posts('showposts=9&cat=64');
if (have_posts()) : while (have_posts()) : the_post();?>
                <div class="pic" id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                   .....
                </div>
<?php endwhile;endif; ?>

这样是实现了每页9张图片,但是到第二页的时候发现内容和第一页一样…
在这里得把这里的代码改下

<?php
 $limit = get_option('posts_per_page');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('&showposts=' . $limit = 9 . '&paged=' . $paged . '&cat=9');
$wp_query->is_archive = true;
$wp_query->is_home = false;
if (have_posts()) : while (have_posts()) : the_post();?>
   <div class="pic" id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
     .....
   </div>
<?php endwhile;endif; ?>

WordPress 获得文章中图片的数量

美女水下唯美摄影

在做图片墙的时候要在缩略图下显示文章中一共有多少张图片。也许你在制作主题的过程中也会有这方面的需要,可以在当前主题目录下的functions.php文件中加入以下代码来实现

//获取文章图片数量
function pic_total() {
    global $post;
    $post_img = '';
    ob_start();
    ob_end_clean();
    $output = preg_match_all('/\<img.+?src="(.+?)".*?\/>/is ', $post->post_content, $matches, PREG_SET_ORDER);
    $post_img_src = $matches [0][1];
    $cnt = count($matches);
    return $cnt;
}

添加之后在主题模板中调用 这个函数就行了

<?php echo pic_total(); ?> 张图片

WordPress文章修订版本和自动保存功能

大家在发表和编辑文章的时候,可能都不喜欢WordPress 自动保存(AutoSave)和文章历史修订版本(Revisions)的功能。一方面网速不好的时候,它会影响编辑和发表文章页面的加载速度;另一方面这些文章的历史修订版本都会写入数据库保存,无形中大大增加了数据库的膨胀速度,冗余数据太多也影响数据库的存取查询效率。wp管理后台并没有提供关闭功能选项。那么如何禁用WordPress自动保存和文章历史修订版本功能呢?这也是WordPress优化数据库第一步要做的内容。

首先我们可以使用WordPress插件,禁用自动保存和关闭文章修订版本的插件有很多,本文最后列举了几个供参考。如果你不想安装插件,那也可以手动修改代码关闭和禁用WordPress自动保存和文章修订版本功能。

关闭WordPress 自动保存功能(AutoSave)

个人觉得WordPress自动保存功能对于经常写原创文章的wper来说还是比较实用的。有时候花了很长时间写一篇博客文章,若突然碰到停电,电脑死机之类的突发情况,没有自动保存那将是很郁闷的事情,所以建议最好还是不要禁用WordPress自动保存功能。如果你是用office word文档等其他编辑器,那就完全可以用下面的方法关闭WordPress自动保存功能:

找到wordpress/wp-admin/目录下的post-new.php,post.php,page-new.php,page.php这四个文件。找到代码wp_enqueue_script(‘autosave’); 直接删除,或者在前面加上”//”将代码注释掉:

// wp_enqueue_script('autosave');

或者打开wp-config.php文件,在

require_once(ABSPATH . 'wp-settings.php');

前添加这段代码:

define('AUTOSAVE_INTERVAL', 3600 ); AUTOSAVE_INTERVAL表示自动保存的时间间隔,

3600表示1个小时,时间随意设,1小时差不多也写完了。

禁用WordPress文章历史修订版本(Revisions)

同关闭自动保存功能一样,在wp-config.php中的代码

require_once(ABSPATH . 'wp-settings.php');

前增加以下代码:

define('WP_POST_REVISIONS',false);

清理数据库中以前的文章历史修订版本

另外你也可以通过phpmyadmin定期清理和删除数据库中的冗余文章修订版本,清理以前的文章修订版本也一样。数据库操作前最好先进行备份。在 phpmyadmin 中进行数据库管理,SQL语句命令行中写入以下运行代码执行(若你设置了数据库表名的前缀,需要将数据表名称中wp改成你的前缀):

DELETE FROM wp_posts WHERE post_type='revision';

另外还可以再用SQL语句:

DELETE FROM wp_postmeta WHERE meta_key= '_edit_lock';
 
DELETE FROM wp_postmeta WHERE meta_key ='_edit_last';

删除数据库中文章特殊数据表wp_postmeta中meta_key字段为_edit_lock(代表上次修改post的修改时间)和_edit_last(指最后一次编辑时间)的数据,然后全选所有表,下拉列表中选择使用phpmyadmin“优化表”功能。

本文转自 http://farlee.info/archives/wordpress-autosave-revisions-closed.html

WordPress缩略图

WordPress 2.9 以后开始WordPress 开始提供了文章缩略图的功能,专门使用一些函数来设置和调用文章的缩略图
首先要开启 WordPress 的缩略图功能,在当前 WordPress 主题的 functions.php 添加以下函数

add_theme_support('post-thumbnails');

开启这个功能之后我们要做的是设置缩略图的默认大小,如果你没有设置默认的是 200X200 可以通过以下函数来设置

set_post_thumbnail_size(200, 200 ); //200 像素宽和 200 像素高

这个函数还有第三个参数 设置 的是如果图片大小超过了我们设置的200X200 是否 对图片进行被裁剪。。。默认为空也就是不裁剪,如果设置为 true 则是要进行裁剪…

set_post_thumbnail_size(200, 200, true ); // 200 像素宽和 200 像素高,裁剪

调用 我们设置的缩略图 可以通过以下函数来实现

<?php
if (has_post_thumbnail() ) {
	the_post_thumbnail(); //如果当前文章有缩略图就在这里输出
} else {
	//如果当前文章没有设置缩略图 可以输出一张默认的图片在这里
}
?>

有时还需要同时生成别的大小的缩略图,可以使用以下函数

add_image_size( 'single-post-thumbnail',660, 99999 )//生成一张660px宽(高度不限制)的图片

可以这样调用刚才生成的图片

<?php the_post_thumbnail( 'single-post-thumbnail' ); ?>

wordpress 获得评论最多的文章

在制作主题中,我们有时需要获得网站中评论最多的文章,可以直接使用以下代码:

$result = $wpdb->get_results("SELECT comment_count,ID,post_title FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 10");
                    foreach ($result as $topten) {
                        $postid = $topten->ID;
                        $title = $topten->post_title;
                        $commentcount = $topten->comment_count;
                        if ($commentcount != 0) {
                            ?>
                            <li><a href="<?php echo get_permalink($postid); ?>" title="<?php echo $title ?>"><?php echo $title ?></a> <?php $commentcount ?></li>
                            <?php
                        }
                    }