日志标签:Wordpress

WordPress 升级至 3.2

时间:2011年07月09日作者:Shieh查看次数: 746 views评论次数:0

WordPress 3.2 这个版本, 献给著名钢琴家、作曲家 George Gershwin。WP 升级还是挺便捷的, 后台自动升级, 不过还是先备份好数据库先。另一个就是每次必须修改下的, WP 自动保存及版本控制的修改, 方法还是跟3.1版本的一样, 参考 禁用WordPress3.1.x自动保存与历史版本控制这篇的办法修改。

  • WordPress 3.2 开始了全新的后台界面;
  • 全屏文章编辑模式;
  • 对服务器环境要求提高了
    要求: PHP 5.2.4 或更新版本, MySQL 5.0 或更新版本;
  • WP3.2 后台不再支持IE6;
  • WP 3.2 还有一个利用 HTML5 技术制作的全新“Twenty Eleven”主题, 这个版本的新主题挺不错的, 简约美。
标签:分类:Web

WordPress Useful Code Script

时间:2011年06月17日作者:Shieh查看次数: 1,078 views评论次数:2

1. 隐藏页面Wordpress版本号, 在主题functions.php文件添加:

// 隐藏版本号
function wpbeginner_remove_version() {
return '';
}
add_filter('the_generator', 'wpbeginner_remove_version');

2. 主题评论添加 Ctrl+Enter 快捷键发表评论. 在 comments.php 中找到以下代码(也就是表单的 textarea):

<textarea name="comment" id="comment" cols="125" rows="12"tabindex="4"></textarea>

修改为:

<textarea name=”comment” id=”comment” cols=”125″ rows=”12″ tabindex=”4″ onkeydown=”if(event.ctrlKey&&event.keyCode==13){document.getElementById(‘submit’).click();return false};”></textarea>

另外一种办法是, 在comments.php的</form>后面添加以下代码:

<script type="text/javascript" language="javascript">
document.getElementById("comment").onkeydown = function (moz_ev)
        {
                var ev = null;
                if (window.event){
                        ev = window.event;
                }else{
                        ev = moz_ev;
                }
                if (ev != null && ev.ctrlKey && ev.keyCode == 13)
                {
                        document.getElementById("submit").click();
                }
        }
</script>

待续…

标签:,,分类:Web

WordPress Contact Form 7 联系表单插件

时间:2011年06月17日作者:Shieh查看次数: 1,476 views评论次数:3

很久前用的 WP Contact Form ][ 插件没有更新了, 用了几年的了, 这次需要整个更加强大的联系表单插件, 可以自定义表单字段, 可以设置插入不同页面不同表单的. Contact From 7 插件可以生成多个联系表单, 简单灵活, 没有多月的囊肿, 多语言版本支持, 还支持自定义邮件或表单内容的现实, 更有Ajax提交与jquery表单支持, 同时也支持Akismet过滤垃圾邮件, CAPTCHA 反垃圾邮件预防 Spam 等. 甚至支持发送附件等功能. 说那么多神码, 自己都入迷了, 还是使用了才知道吧. 演示: 联系表单.

Contact Form 7 can manage multiple contact forms, plus you can customize the form and the mail contents flexibly with simple markup. The form supports Ajax-powered submitting, CAPTCHA, Akismet spam filtering and so on.

Note:
附件设定: 添加附加后提交跳转到指定页面,可以用如下代码
on_sent_ok: "location = 'http://example.com/';"

推荐阅读: WP Contact Form 7 联系表单插件图解使用教程 以及 Contact Form 7 表单使用办法.

如果使用出现 Failed to send your message. Please try later or contact administrator by other way, 请不要在本地调试, 传到服务器上使用,或者就是检查下插件配置, 看看 akismet 插件等, 这类插件也会导致表单提交出现上面发不出邮件的情况.

WP不同页面调用不同的侧边栏Widge

时间:2011年06月15日作者:Shieh查看次数: 689 views评论次数:0

WordPress 不同页面调用不同的侧边栏内容有利于搜索引擎优化(SEO)。最基本的语法如下:

<?php if ( is_home() ) { ?>只在首页显示<?php } ?>
<?php if ( is_single() ) { ?>只在文章页面显示<?php } ?>
<?php if (is_home()) : ?> [不同侧边栏内容,只在首页显示] <?php endif; ?>

如果遇到 if(is_home()) 等无效或者添加了该判断还是显示出来的话。用下面这个判断。

<?php wp_reset_query(); if ( is_home() ) { ?>
[只在首页显示]
<?php } ?>

几个嵌套的判断语法:

<?php if (is_home()) : ?>
 <div>
  <h3>Categories</h3>
  <ul>
   <?php wp_list_cats(); ?>
  </ul>
 </div>
<?php else if (is_single()) : ?>
 <div>
  <h3>Archives</h3>
  <ul>
   <?php wp_get_archives(); ?>
  </ul>
 </div>
<?php else : ?>
 <div>
  <h3>Meta</h3>
  <ul>
   <?php wp_register(); ?>
   <li><?php wp_loginout(); ?></li>
  </ul>
 </div>
<?php endif; ?>

如果不想折腾那么麻烦, 可以去找一些插件来实现这个效果。更多的Wordpress语法标签参考WP官方的函数调用文档:http://codex.wordpress.org/Template_Tags

标签:,分类:Web

优化WordPress Header的wp_head()函数

时间:2011年05月15日作者:Shieh查看次数: 527 views评论次数:0

WordPress 3以后的头部 Header 代码加入了很多类似 rsd_link, rel_link, index_rel_link 之类的. 这些都是Wordpress主题的 wp_head() 函数内置的. 清理优化wp_head()函数里面生成到 header 的代码, 可以在主题文件的 functions.php 文件里面加入如下的代码来精简囊肿的wp header代码.

<?php
remove_action( 'wp_head', 'feed_links_extra', 3 ); // Display the links to the extra feeds such as category feeds
remove_action( 'wp_head', 'feed_links', 2 ); // Display the links to the general feeds: Post and Comment Feed
remove_action( 'wp_head', 'rsd_link' ); // Display the link to the Really Simple Discovery service endpoint, EditURI link
remove_action( 'wp_head', 'wlwmanifest_link' ); // Display the link to the Windows Live Writer manifest file.
remove_action( 'wp_head', 'index_rel_link' ); // index link
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); // prev link
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 ); // start link
remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 ); // Display relational links for the posts adjacent to the current post.
remove_action( 'wp_head', 'wp_generator' ); // Display the XHTML generator that is generated on the wp_head hook, WP version
?>

选择性的去除的一些, 自己衡量了, 我差不多把全部干掉了.

标签:,,分类:Web

WordPress 3+ Gravatar头像无法显示的解决方法

时间:2011年05月10日作者:Shieh查看次数: 643 views评论次数:1

这几天天朝的墙又升级了, WordPress 评论的 Gravatar 头像无法显示, 不用看, 用脚板想都知道 Gravatar 服务器的地址( 0.gravatar.com )被墙在天朝外面了。木有办法, 不想用缓存 Gravatar 至本地服务器, 因为俺有点洁癖, 喜欢空间干净整洁, 文件少。所以只能折腾下修改 WordPresss 文件, 把 0.gravatar.com 地址换一个没被墙掉的。

打开“ wp-includes/pluggable.php ”文件, 搜索 gravatar.com, 找到下面的代码:

if ( is_ssl() ) {
	$host = 'https://secure.gravatar.com';
} else {
	if ( !empty($email) )
		$host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash[0] ) % 2 ) );
	else
		$host = 'http://0.gravatar.com';
}

替换为如下代码:

	if ( is_ssl() )
	$host = 'https://secure.gravatar.com';
	else
	$host = 'http://www.gravatar.com';

OK, 搞定。

标签:,分类:Web

禁用WordPress3.1.x自动保存与历史版本控制

时间:2011年04月27日作者:Shieh查看次数: 754 views评论次数:1

撤掉禁止 WordPress 自动保存与历史版本控制会造成ID的不连续,对于追求完美的人来说, 对自动保存和历史版本控制功能并不是太感冒, 呵呵。找了下, 汇总了一些关于禁止自动保存和历史版本控制的办法。

1. 首先在 wp-config.php 文件, 在 if ( !defined(‘ABSPATH’) ) 前面添加以下代码:

define('AUTOSAVE_INTERVAL', false);
define('WP_POST_REVISIONS', false);

2. 在 wp-includes/default-filters.php 中, 加 // 注释掉 wp_save_post_revision 这个函数。

// add_action( 'pre_post_update', 'wp_save_post_revision' );

3. 在 wp-admin/post.php 及 post-new.php 文件中, 继续注释掉

// wp_enqueue_script('autosave');

4. (1) 找到 wp-admin/includes/post.php 文件中的 wp_create_post_autosave 函数, 将该函数的最后一句:

return _wp_put_post_revision( $_POST, true );

改为:

return edit_post();

通过修改这两行代码,即保留了自动保存功能,又去掉了历史记录功能,另一个额外的好处是可以让文章ID连续增长。

(2) 另外也可以从 wp-admin/includes/post.php 文件中找到这段(大概在399行处):

if ( $create_in_db ) {

在它下面找到这部分代码:

$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
$post = get_post( $post_id );

修改为:

$post_auto_draft = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_type = '$post_type' AND post_status = 'auto-draft' LIMIT 1" );
if ( $post_auto_draft ) {
	$post = $post_auto_draft;
} else {
	$post = get_post( wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) ) );
}

(3) 又或者可以将下面整个代码:

if ( $create_in_db ) {
    // Cleanup old auto-drafts more than 7 days old
    $old_posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = 'auto-draft' AND DATE_SUB( NOW(), INTERVAL 7 DAY ) > post_date" );
    foreach ( (array) $old_posts as $delete )
        wp_delete_post( $delete, true ); // Force delete
    $post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
    $post = get_post( $post_id );
    // Below is added in 3.1
    if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )
        set_post_format( $post, get_option( 'default_post_format' ) );
} else {
    $post->ID = 0;
    $post->post_author = '';
    $post->post_date = '';
    $post->post_date_gmt = '';
    $post->post_password = '';
    $post->post_type = $post_type;
    $post->post_status = 'draft';
    $post->to_ping = '';
    $post->pinged = '';
    $post->comment_status = get_option( 'default_comment_status' );
    $post->ping_status = get_option( 'default_ping_status' );
    $post->post_pingback = get_option( 'default_pingback_flag' );
    $post->post_category = get_option( 'default_category' );
    $post->page_template = 'default';
    $post->post_parent = 0;
    $post->menu_order = 0;
}

将上面的代码替换为:

if ( $create_in_db ) {
    global $current_user;
    $post = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_type = '$post_type' AND post_author = $current_user->ID ORDER BY ID ASC LIMIT 1" );
    if ( !$post ) {
        $post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );
        $post = get_post( $post_id );
    }
    /* End */
    // Below is added in 3.1
    if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )
        set_post_format( $post, get_option( 'default_post_format' ) );
}

OK, 这些全部搞定了, 自动保存功能还可以用, ID也能够连续了, perfect。

删除已经生产的版本控制命令为:

DELETE FROM wp_postmeta WHERE post_id IN (SELECT id FROM wp_posts WHERE post_type = 'revision');

DELETE FROM wp_term_relationships WHERE object_id IN (SELECT id FROM wp_posts WHERE post_type='revision');

DELETE FROM wp_posts WHERE post_type='revision');

将ID重新设置为连续, 设置一个ID就要4条SQL语句, 比如将ID为99的文章修改为ID为88, 需要执行以下语句。

update wp_posts set id = 88 where id = 99;
update wp_term_relationships set object_id = 88 where object_id = 99;
update wp_postmeta set post_id = 88 where post_id = 99;
update wp_comments set comment_post_ID = 88 where comment_post_ID = 99;

文章ID连续了, 但继续发表新文章时, ID还是会从之前不连续时的最大数字往后编。
这时, 修改下 auto_increment 的数值就OK了,即在 phpmyadmin 中执行下面语句:

alter table wp_posts AUTO_INCREMENT=n

n=梳理后的最大id+1, 比如梳理后最后一篇文章的id是50,那么n就设为51。

另外如果觉得修改代码麻烦的, 可以按照 Super Switch 插件, 将“自动保存”和“保存修订版本”设为禁止。

PS: 补充另外一种更加简单有效的办法, 在主题的 functions.php 文件里面加入如下代码即可

wp_deregister_script('autosave');
remove_action('pre_post_update', 'wp_save_post_revision' );

或者

remove_action('pre_post_update', 'wp_save_post_revision' );
wp_deregister_script('autosave');
remove_filter('the_content', 'wptexturize');

这样便可以避免更新升级wordpress版本的时候又去修改源代码的麻煩了。

3种关闭WordPress对自己Pingback的办法

时间:2011年04月26日作者:Shieh查看次数: 643 views评论次数:2

Pingback 的作用是什么? 移步到维基百科看解释吧, http://zh.wikipedia.org/wiki/Pingback

关闭 WordPress Pingback 站内文章的办法有:

1. 安装 no-self-ping 插件,把它上传到 wordpress 的 plugin 目录,再到后台把它激活。

2. 在 WordPress 主题的 functions.php 中添加如下代码:

function no_self_ping( &$links ) {
$home = get_option( 'home' );
foreach ( $links as $l => $link )
if ( 0 === strpos( $link, $home ) )
unset($links[$l]);
}
add_action( 'pre_ping', 'no_self_ping' );

这其实也就是 No-self-ping 插件的代码, 只不过移植到主题内部去而已, 对于不想多装几个插件的可以使用。

3. 还有一个就是进入 WordPress 的数据库中, 用一条简单的命令,:

UPDATE `wp_posts` SET ping_status="closed";

这个命令是彻底关闭所有的 pingback 和 trackback 功能, 但是不推荐这样做, 从 SEO 角度上做, 外部的 pingback 和 trackback 还是对 SEO 有利的。

标签:,,分类:Web

优化清理wp_options数据表冗余数据

时间:2011年04月26日作者:Shieh查看次数: 573 views评论次数:0

WordPress 数据表中最让人头痛的就是 WP_Options 数据表, 还好这个表是独立跟其他表没有关联的. wp_options 表主要是存贮WP的全局数据设置方面的信息, 如博客名、博客地址、基本设置、插件设置、主题设置等等. 清理wp_options数据表有以下方法:

  1. 安装 Clean Options 插件清理 WP_Options 数据表的冗余数据 。下载安装-激活-进入操作即可。也可以进入你的phpMyAdmin, 手动选择删除 wp_options 数据表里的内容, 以 _transient 、_site 开始的都可以删除掉。这些都是治标的办法。
     
  2. 备份 wp_options 数据表并导出, 然后清空 wp_options 表, 然后在本地架设环境新安装一个 WordPress。
    设置好和你服务器上的博客同样的博客名、博客地址、基本设置等等, 然后导出本地的 wp_options数据表, 导入到服务器上的数据库去。最后然后进入博客重新设置下插件、博客主题等。

另外推荐阅读这篇文章 WordPress数据表wp_options全解析

标签:,,分类:Web

漂亮的wp代码语法高亮插件 – Syntax Highlighter

时间:2011年04月21日作者:Shieh查看次数: 647 views评论次数:2

代码语法高亮, 让单纯的符号变成可读性强, 漂亮的代码符号就像一件艺术品. 找了几款 WordPress 代码语法高亮插件测试了下, 发现还是 SyntaxHighlighter Evolved 的强大些, 可选的高亮主题样式也很多.

1. Syntax Highlighter 语法代码高亮显示效果:

syntaxhighlighter

安装方法及更强大的使用说明移步到官方网站 http://alexgorbatchev.com/SyntaxHighlighter/

2. 另外, 发现了一个更好的国人修改版的 wp代码语法高亮插件 – Syntax Highlighter Optimized.

显示效果一样, 但是做了些小的修改. 推荐国人的 Syntax Highlighter Optimized, 貌似更加适合我. Yeah!

******************************
主要特性:

  • 采用最新版 SyntaxHighlighter 3.0.83 作为核心代码
  • 语法js文件动态加载,只加载页面中需要的
  • 选择代码段时不会选中行号
  • 自动换行,行号自动对齐
  • 日志编辑器中增加插入代码的按钮
  • 内置8种风格css

本插件支持几乎所有主流的程序语言。
本插件在IE[6-8]、FireFox3、Chrome5下测试通过。

******************************

使用方法:
1.在 可视化编辑 中点击按钮插入代码。
2.在 HTML编辑 中使用以下格式插入代码

标签:,分类:Web