如何在WordPress主页、日志页显示不同页脚

要实现在WordPress主页、文章页显示不同页脚,我们就需要使用get_footer函数。另外,千万不要和wp_footer函数混淆哦,wp_footer函数是用在body标签之前用来结束页脚的标记。

get_footer 函数

get_footer 函数只需要一个参数就可以调用你想要显示的页脚模板。

<?php get_footer( $name ); ?>

大部分主题在使用这个函数的时候不添加任何参数。我们可以通过输入参数,让WordPress调用不同的模板。

例如,我们将下面的代码添加到single.php模板中:

<?php get_footer('single'); ?>

然后,WordPress会插入一个名为footer-single.php的模板。同样,我们也可以在page.php中使用get_footer(‘page’)调用footer-page.php模板;在index.php中使用get_footer(‘index’)调用footer-index.php模板;在404.php中使用get_footer(’404′)调用footer-404.page模板。

你只需要花费很少的时间就可以创建这些自定义的模板,并自由的进行定制所需要显示的内容。下面让我们以page页为例,来看一下创建自定义页脚所需要的步骤:

  1. 新建一个名为footer-page.php的文件,插入从footer.php复制的所有代码。
  2. 上传footer-page.php至你的主题文件夹。
  3. 通过wordpress主题编辑器或者电脑中的一个文本编辑器打开主题文件page.php,在文本下方可以看到get_footer()函数,将其改为get_footer(‘page’),保存并上传你的文件。

ok,你的page.php页面调用的就是footer-page.php,而不是footer.page了。

最后,你需要做的就是定制你的footer-page.php,可以改变布局、配色方案,也可以显示不同的信息。

资料来源:http://laygle.com/2012/01/show-different-footer-wordpress-pages/

WordPress 排除指定分类以及不同分类显示不同内容

WordPress 如何实现循环内排除指定分类以及不同分类显示不同内容?分享来自网络搜集的代码,同时也是给自己备忘。

Wordpress 主循环外排除特定分类:

用途举例:一般 WordPress 主题的 index.php 都是输出所有分类的日志,但是对于不同的需求可以 DIY 一下,比如说你想隐藏某特定分类下的日志,让其不在首页显示,但是这又不同于私有日志,它是公开可见的。这时候就需要在 the loop 之外将此特定分类排除。

在 WordPress 默认模板中,主循环调用文章的代码格式如下:

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
//主循环内容
<?php endwhile; ?>
<?php endif; ?>

默认情况下,文章调用范围为所有分类。如果排除某分类,可以使用 query_posts() 函数:

<?php query_posts(‘cat=-1’); ?>

以上代码调用除分类 ID 为 1 外的所有文章。将其插入主循环前即可。

由于 query_posts() 函数会与分页功能造成冲突,可以将 query_posts() 语句替换为:

<?php
$limit = get_option(‘posts_per_page’);
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
query_posts(‘cat=-1&showposts=’ . $limit=10 . ‘&paged=’ . $paged);
?>

若需排除特定分类,又要保持分页功能正常,则完整代码如下:

<?php
$limit = get_option(‘posts_per_page’);
$paged = (get_query_var(‘paged’)) ? get_query_var(‘paged’) : 1;
query_posts(‘cat=-1&showposts=’ . $limit=10 . ‘&paged=’ . $paged);
?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
//主循环内容
<?php endwhile; endif; ?>

Wordpress 主循环内排除特定分类:

用途举例:如果博主希望需要根据日志分类来显示不同的广告,这时候,你就需要用到 in_category 函数,在 the loop 之内排除 WordPress 的特定日志分类。

用法如下:

<?php
if ( in_category( ‘pachoderms’ )) {
// They have long trunks…
} elseif ( in_category( array( ‘Tropical Birds’, ‘small-mammals’ ) )) {
// They are warm-blooded…
} else {
// & c.
}
?>

其他示例

<?php
if ( in_category(‘fruit’) ) {
include ‘single-fruit.php’;
} elseif ( in_category(‘vegetables’) ) {
include ‘single-vegetables.php’;
} else {
// Continue with normal Loop
if ( have_posts() ) : while ( have_posts() ) : the_post();
// …
}
?>

in_category 函数的具体用法可以参见官方文件

资料来源:http://wange.im/wordpress-exclude-category.html

WordPress网站首页如何排除指定分类文章

WordPress网站首页如何排除指定分类的文章?要做到这一点,你就需要在 The loop 中更改调用文章的函。.WordPress默认主题 Twenty Ten 和 Twenty Eleven 使用 the_post() 函数来调用所有的博客文章.
<?php while ( have_posts() ) : the_post(); ?>
the_post() 函数使用 WP_Query.我们可以使用 WP_Query 函数本身来自定义哪些文章被调用,或者哪些存档、分类、时间的文章可以显示在主页.

另外,我们还可以使用 query_posts 函数来控制 The Loop 循环.这种方法无疑是最好的,因为它并没有改变你的循环.不过,两种方法我都会讲解,你可以选择一个适合你的.
使用函数WP_Query
如果你想改变你的主页显示效果,你需要编辑你的主题index.php文件.大部分主题使用archive.php文件来作为分类(category)、时间(date)、标签(tag)的的显示页面, 所以你想更改某个存档页面只要修改archive.php文件就可以了.还有一些主题有专门的category.php、date.php、tag.php模板,修改相对应的就好.
大多数主题文件的循环会以"Start the Loop"开始.例如在Twenty Eleven主题中,看起来像这样:
<?php /* Start the Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
你需要替换为以下函数:
// The Query
$query = new WP_Query( $args );
// The Loop
while ( $query->have_posts() ) : $query->the_post();
要控制哪些文章在循环中显示,你需要定义在WP_Query中的参数,即修改 $query = new WP_Query( $args );.
目前有5种参数,比较常用的是参数是 cat 和 category_name  .
若你要显示你的 tech 分类,而它的分类ID是1,那么你可以使用参数cat:
$query = new WP_Query( ‘cat=1’ );
或者你可以使用参数 category_name 来达到同样的效果:
$query = new WP_Query( ‘category_name=tech’ );
若想多添加几个分类,则需要用逗号分隔.
$query = new WP_Query( ‘cat=1,7,121’ );

$query = new WP_Query( ‘category_name=news,reviews,tutorials’ );
在分类ID前加上减号来排除某一类的所有文章.注意,不可以使用category_name 参数来排除类别.
$query = new WP_Query( ‘cat=-1’ );
在上面说过,有5种参数,我已经讲解了其中两个:cat 和 category_name,都是从你的文章列表中包含或排除某些类别.
其他三个参数是 category_and、category_in和category_not_in.
category_and显示多个分类的文章:
$query = new WP_Query( array( ‘category__and’ => array( 1, 7 ) ) );
category_in是一个or函数:
$query = new WP_Query( array( ‘category__in’ => array( 7, 127 ) ) );
排除多个类别:
$query = new WP_Query( array( ‘category__not_in’ => array( 2, 6 ) ) );
WP Query是一个非常灵活的功能函数.分类只是其中的一个参数而已,还可以使用:
Author Parameters – 显示某个作者或多个作者的文章列表,也可以排除之.
Tag Parameters – 显示或排除某些Tag的文章列表.
Taxonomy Parameters – 显示一个或多个自定义分类的文章列表..
Post & Page Parameters – 使用IDs 或 page slugs显示某些特定的文章.
Type & Status Parameters – 显示某些文章类型的文章或带有附件的文章.
Pagination Parameters – 确定每页显示的文章数量.
Offset Parameter – 文章从某哪开始显示.
Order & Orderby Parameters – 更改文章列表的排列顺序.
Sticky Post Parameters – 显示包括或排除置顶文章的文章列表.
Time Parameters – 显示某些时间段的文章.
Custom Field Parameters – 显示相关自定义字段的文章.
Permission Parameters – 显示发布的或私密的文章.
WP_Query 页面为每个参数都提供了例子,这里就不一一讲解具体用法了.
使用函数query_posts
query_posts可以非常简单的定制你在页面上显示的文章,而且你不必更改现有的循环代码.
query_posts( $args );
要使用它的功能,你就必须在你的loop循环开始之前调用它.例如:
// The Query
query_posts( $args );
// The Loop
while ( have_posts() ) : the_post();
如果你计划调用页面中的第二个循环,请确保你使用了wp_reset_query()来重置你的循环.例如:
// The Query
<?php query_posts( $args ); ?>
<?php /* Start the Loop */ ?>
   <?php while ( have_posts() ) : the_post(); ?>
    <?php get_template_part( ‘content’, get_post_format() ); ?>
   <?php endwhile; ?>
<?php wp_reset_query(); ?>
要显示某些分类的文章,你需要用到 cat 参数:
<?php query_posts( ‘cat=1,5,6’ );  ?>
同样,要排除某些分类,你需要在前面添加减号:
<?php query_posts( ‘cat=-3,-5’ );  ?>
还可以用来显示特定的文章:
query_posts( ‘p=2’ );
要定义每页显示文章的数量,你可以使用 posts_per_page 参数:
query_posts( ‘posts_per_page=5’ );
想要了解更多的信息,请访问query_posts页面.

资料来源:http://laygle.com/2012/01/wordpress-exclude-categories/

wordpress站点临时维护或关闭时应该如何处理

wordpress站点临时维护或临时关闭(例如需要备案时)我们应该如何处理呢?直接关闭站点那是非常不明智的方法,对访客或者是搜索引擎来说都不是友好的,也许你可能会想到直接做个一个维护提示页面然后将网站请求全部都定向到维护提示页面,这样处理虽然对与用户体验来说是非常友好的,但是对于搜索引擎来说可就糟糕透顶了,在搜索引擎看来你整个网站的内容都变成一样的了,那不K你才奇怪了。百度站长平台曾推荐过在网站维护时可以返回http503状态码这样可以告诉搜索引擎,网站正在维护中。

使用wordpress搭建的网站要做到这一点是非常简单的仅仅需要向functions.php文件中添加一些代码就可以实现了。

function wp_maintenance_mode(){
    if(!current_user_can(‘edit_themes’) || !is_user_logged_in()){
        wp_die(‘网站维护中……’, ‘请在7:00之后再来’, array(‘response’ => ‘503’));
    }
}
add_action(‘get_header’, ‘wp_maintenance_mode’);

当网站维护完毕后只需要将代码注释或者删除掉就好了。

来源:http://v7v3.com/wpjiaocheng/20130611.html

让wordpress注册支持中文用户名的方法

使用wordpress搭建网站或者博客的朋友应该都知道:wordpress注册用户默认是不能使用中文用户名的,不过对于很多人来说,英文用户名不但不方便记忆,还不符合国人习惯,那有没有办法让wordpress直接支持中文用户名注册呢?网上搜来的教程基本都是修改WordPress的源文件formatting.php,但是修改源文件的话,下次WP升级又得再修改一次,很是麻烦,今天无意间在网上看见另外一种方法,收藏于此备忘。

将以下php代码复制到当前主题目录下的functions.php中,即可让WordPress支持使用中文用户名注册和登录:

function ludou_non_strict_login( $username, $raw_username, $strict ) {
if( !$strict )
return $username;
return sanitize_user(stripslashes($raw_username), false);
}
add_filter(‘sanitize_user’, ‘ludou_non_strict_login’, 10, 3);

这是利用了WordPress提供的丰富的filter和action功能,这下wordpress也不怕了。

资料来源

优化WordPress主题函数实现载入速度的提升

WordPress很多函数由于牵涉到数据库查询,所以在一定程度上会影响网站载入速度,在性能不佳的服务器上尤其影响严重,下面我就来看看哪些WordPress函数可以使用静态代码替代的或是可以删除的WordPress主题函数吧。

<?php language_attributes(); ?>该函数位于header.php文件,这个函数是用于生成当前博客所使用的语言的,比如“lang=’zh-CN’”,用来告诉浏览器当前页面是基于中文的,意义不大,所以为了速度删除吧

<?php bloginfo(’html_type’); ?> 该函数位于header.php文件,可使用text/html替换;

<?php bloginfo(’charset’); ?> 该函数位于header.php文件,是用来指定页面编码的,因为WordPress正常情况下使用的是UTF-8编码,所以这里可以使用UTF-8替换;

<?php bloginfo(’name’); ?> 该函数是用来生成博客标题的,可以说可能遍布全主题,所以如果你明确你博客的标题而且不经常修改或是修改不怕麻烦的话,可使用固定的名称来替换这个函数;

<?php bloginfo(’description’); ?> 如果上一个博客标题的函数一样,这个是用来生成显示博客副标题的,也可以使用静态的文字来替换,当然如果不需要的话也可以删除;

<meta name=”generator” content=”WordPress <?php bloginfo(’version’); ?>” /> <!– leave this for stats –> 该函数位于header.php文件(很多主题也没有这个函数), 记得去年,WordPress有一版除了漏洞,很多WordPress博客被黑了,原因就是很多人在自己的博客上暴露了当前使用的WordPress版本。

<?php bloginfo(’stylesheet_url’); ?> 该函数位于header.php文件,是用来描写主题样式表位置的,如果你知道主题样式的绝对地址的话,也可以使用绝对地址来替换,如果不知道绝对地址的话,请不要改动这里;
<?php bloginfo(’rss2_url’); ?> 该函数位于一般会出现在header.php、sidebar.php、footer.php三个文件里,是WordPress自带的RSS解释地址函数。出现在header.php文件是用来给像Firefox这类的能在地址栏里检测是否有RSS输出显示图标的,但是现在的阅读器一般支持直接输入博客地址自动获取RSS地址,以及很多博客都会通过第三方烧录RSS地址,所以这个函数也是可以删除的。但如果是你指定这个函数到订阅图标的,那就另当别论了

<?php bloginfo(’pingback_url’); ?> 该函数位于header.php文件,是用来生成pingback地址的,可以删除;

<?php bloginfo(’stylesheet_directory’); ?> 该函数是用来生成样式文件所在的文件夹目录地址,一般出现在样式中,比如引用背景图片时的地址,这个函数也可以使用绝对地址来替换,当然前提是你知道绝对地址;

<?php bloginfo(’comments_rss2_url’); ?> 该函数位一般出现在sidebar.php、footer.php两个文件里,是解释生成评论RSS地址的,如果不提供评论的RSS订阅,那就可以删除这个函数;

<?php queries. seconds. –>该函数位于footer.php文件,用来显示页面载入速度,当然显示这个不会让你有多少快感,可以删除;

如果你在主题中使用了Widgets,并且你准备一直都使用Widgets而不使用主题自带的侧边栏内容的话,你可以在sidebar.php中寻找位于 if ( !function_exists(’dynamic_sidebar’) || !dynamic_sidebar() ) : ?>和<?php endif; ?> 之间的代码,这些代码明显没什么价值了,可删除。

wordpress远程连接mysql数据库方法及设置

其实wordpress远程连接mysql数据库的方法很简单,不过前提是必须开启服务器的远程mysql的远程访问(在你需要做远程数据库的服务器上设置),然后再修改一下WordPress里面的wp-config.php文件即可。

开启mysql开启远程登录功能

1、如果你的服务器是CP面板。那么你可以在CP面板那里找到远程MySQL菜单,进入后把你允许远程连接的IP地址添加上(即本地网站IP地址),然后返回新建数据库和用户账号,把用户账号添加进数据库,设置账号权限即完成mysql远程登录的开启。

2、如果你的服务器没安装面板,那么只能命令行操作了,命令行下更改mysql可以远程登录主要有两种办法。

1、改表法

登录mysql数据库,然后选择mysql这个数据库,找到user表,把对应账号的"host"字段由localhost更改成对应ip或者"%"即可.改成对应的ip说明只有这个ip地址的主机可以登录,而%表示可以在任何电脑上登录.不过如果你使用的虚拟主机或者不支持修改mysql数据库,那么你可能需要和主机商联系了.

例如:[root@XXX]# /usr/local/mysql/bin/mysql -u root -p ;

输入密码登录mysql;

mysql>use mysql ;

mysql>select user,host from user ;

mysql>update user set host=’%’ where user=’root’ ;

mysql

不过建议不要把那么重要的root给设置成所有主机都可以登录吧.

2、授权法

说白了,这个方法就是新建一个用户,然后给这个用户授权,具体操作如下.首先当然需要用root登录mysql数据库.

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@’%’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

这个说明新加一个myuser账号,密码是mypassword,可以从任何主机登录,显示所有数据库并拥有所有权限.不过有时候你可能只想让这个用户看见一个数据库,那么可以在"*.*"进行设定.比如

mysql> GRANT ALL PRIVILEGES ON mydatabase.* TO ‘myuser’@’%’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

说明myuser账号只有对mydatabase下的所有表拥有权限.这里也可以设置成仅对某数据库某张表拥有权限.

如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码,那么可以这样设置吧.

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@’192.168.1.3′ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

(上述设置都是在远程端设置)

3、修改wordpress的本地设置,打开wp-config.php文件,修改里面的有关MySql的连接字段值:

/** WordPress 数据库的名称 */
define(‘DB_NAME’, ‘你的远程数据库的名称’);

/** MySQL 数据库用户名 */
define(‘DB_USER’, ‘你的远程数据库用户名’);

/** MySQL 数据库密码 */
define(‘DB_PASSWORD’, ‘你的远程数据库密码’);

/** MySQL 主机 */
define(‘DB_HOST’, ‘你的远程数据库IP地址’);

这里你只需要把里面的几项修改成需要连接数据库的数据库名称,用户名,密码和主机ip地址,就可以连接你的远程Mysql数据库了。

WordPress头像本地缓存优化版代码

本站以前一直采用Willin Kan大神的WordPress头像本地缓存,不过有个问题一直困扰着我:Willin Kan的WordPress头像本地缓存代码对于同为默认头像的不同用户会生成不同的名称文件,这就导致了如果有很多没有设置Gravatar头像的用户留言,缓存后会产生大量的不同文件名的,实际是相同图片的默认头像,占用空间,拖累网络。

Willin Kan的WordPress头像本地缓存代码

/* Mini Gavatar Cache by Willin Kan. */
function my_avatar( $email, $size = ’50’, $default = ”, $alt = ” ) {
  // $alt = (false === $alt) ? ” : esc_attr( $alt );
  $alt = (” == $alt) ? ” :  $alt ;
  $f = md5( strtolower( $email ) );
  $a = get_bloginfo(‘wpurl’). ‘/avatar/’. $f. ‘.jpg’;
  $e = ABSPATH. ‘avatar/’. $f. ‘.jpg’;
  $t = 1209600; //设定14天, 单位:秒
  if ( empty($default) ) $default = get_bloginfo(‘template_directory’). ‘/img/default.jpg’;
  if ( !is_file($e) || (time() – filemtime($e)) > $t ){ //当头像不存在或文件超过14天才更新
    $r = get_option(‘avatar_rating’);
    //$g = sprintf( "http://%d.gravatar.com", ( hexdec( $f{0} ) % 2 ) ). ‘/avatar/’. $f. ‘?s=’. $size. ‘&d=’. $default. ‘&r=’. $r; // wp 3.0 的服务器
    $g = ‘http://www.gravatar.com/avatar/’. $f. ‘?s=’. $size. ‘&d=’. $default. ‘&r=’. $r; // 旧服务器 (哪个快就开哪个)
    copy($g, $e); $a = esc_attr($g);
  }
  if (filesize($e) < 500) copy($default, $e);
  $lazy_avatar = get_bloginfo(‘template_directory’). ‘/img/grey.gif’;//LazyLoad头像处理 不需要时,下面src='{$a}’
  $avatar = "<img title='{$alt}’ alt='{$alt}’ data-original='{$a}’ src='{$lazy_avatar}’ class=’avatar avatar-{$size} photo’ height='{$size}’ width='{$size}’ />";
  return apply_filters(‘my_avatar’, $avatar, $email, $size, $default, $alt);
}

下面的是来自露兜的WordPress头像本地缓存优化版代码.

function my_avatar( $email, $size = ’32’, $default = ”, $alt = ”) {
$f = md5( strtolower( $email ) );
$a = WP_CONTENT_URL . ‘/avatar/’. $f . $size . ‘.png’;
$e = WP_CONTENT_DIR . ‘/avatar/’ . $f . $size . ‘.png’;
$d = WP_CONTENT_DIR . ‘/avatar/’ . $f . ‘-d.png’;
if($default==”)
$default = ‘http://www.ludou.org/default.jpg’;//这里设置你的默认头像
$t = 2592000; // 缓存有效期30天, 这里单位:秒
if ( !is_file($e) || (time() – filemtime($e)) > $t ) {
if ( !is_file($d) || (time() – filemtime($d)) > $t ) {
// 验证是否有头像
$uri = ‘http://www.gravatar.com/avatar/’ . $f . ‘?d=404’;
$headers = @get_headers($uri);
if (!preg_match("|200|", $headers[0])) {
// 没有头像,则新建一个空白文件作为标记
$handle = fopen($d, ‘w’);
fclose($handle);
$a = $default;
}
else {
// 有头像且不存在则更新
$r = get_option(‘avatar_rating’);
$g = ‘http://www.gravatar.com/avatar/’. $f. ‘?s=’. $size. ‘&r=’ . $r;
copy($g, $e);
}
}
else {
$a = $default;
}
}
$avatar = "<img alt='{$alt}’ src='{$a}’ class=’avatar avatar-{$size} photo’ height='{$size}’ width='{$size}’ />";
return apply_filters(‘my_avatar’, $avatar, $email, $size, $default, $alt);
}

使用方法

     1、在wp-content目录下新建一个目录,命名为avatar,权限设为755;
     2、将以上代码放到当前主题function.php的最后一个 ?> 的前面
     3、以上代码第8行换成你本地的默认头像地址
     4、这里默认头像大小是 32*32,可在以上代码第1行更改
     5、在需要使用Gavatar头像的地方调用 my_avatar 函数即可。一般在主题所有文件中,将 get_avatar 函数替换为 my_avatar 。有个例外,functions.php评论列表函数中:

get_avatar( $comment

需要改成:

my_avatar( $comment->comment_author_email

因为my_avatar函数只能通过Email来调取用户头像,所以以上情况,需要将第一个参数改成email地址。

资料来源:http://www.ludou.org/wordpress-gravatar-local-cache.html