Category: Wordpress

WordPress中文标签tag无法显示的解决办法

By lwl0606, 2010年08月23日

 

WordPress点击中文标签提示找不到文章的页面,有以下几种解决方法

修改wp-includes/rewrite.php
这是网上最常见的方法,原理是,让WordPress在对其他内容使用Permalink的时候,对tag不使用,而使用链接2的QueryString模式发送中文编码:

function get_tag_permastruct() {
if (isset($this->tag_structure)) {
return $this->tag_structure;
}
if (empty($this->permalink_structure)) { //-----this line need change------
$this->tag_structure = '';
return false;
}
把第5行改为

if (!empty($this->permalink_structure)) {

如果你用的是windows主机,还可以这样做:

原理是,IIS会将PathInfo中的UTF-8转换成GBK,而QueryString中就不会转换,故而为了使用Permalink,采用以下方法:
打开wp-includes/classes.php文件,
if ( isset($_SERVER['PATH_INFO']) )
$pathinfo = $_SERVER['PATH_INFO'];
else
$pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = $_SERVER['REQUEST_URI'];
改为

if ( isset($_SERVER['PATH_INFO']) )
$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");
else
$pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");

这种发放的缺点是 :只对Windows主机、且必须是Windows下的IIS主机有效。

WordPress错误Fatal error: Maximum execution time of 30 seconds exceeded in

By admin, 2010年08月18日

今天打开WordPress博客出现如下错误
Fatal error: Maximum execution time of 30 seconds exceeded in D:\Hosting\4922727\html\lwl0606\wp-includes\comment.php on line 42

程序执行时间过长导致的; 可能是数据量太大,或主机本身的原因。
博客所使用的服务器设置做了限制,php.ini 中缺省的程序最长执行时间是 30 秒,程序若执行超过30秒,就会被系统终止。

用的是godaddy的主机,godaddy主机是出了名的抽,平常也好好的,但是动不动就会抽一下,慢的要死。

解决办法:

1.如果是自己的服务器,可更改php.ini中的max_execution_time数值,数值大小自己选择,改到错误不出现为止,默认是30, 改成300 ;
2.如果使用的是虚拟主机,可以在主机根目录下的.htaccess文件中设置(如果没有该文件,可以新建一个),在.htaccess文件中加上php_value max_execution_time 300,300这个数值单位为秒
3.在wp-includes\http.php中添加该语句:
set_time_limit(300);   //0为无限制
4.在wp-includes\http.php中添加该语句:
ini_set('max_execution_time', '300');
加在<?php 的下面

godaddy的windows主机运行WordPress报500错误:500 - Internal server error

By admin, 2010年07月25日

把godaddy的linux主机换成了Windows主机,运行WordPress后台,设置保存的时候报500出错,代码如下:

500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.

首先检查文件夹的权限,看是否有足够的读写权限。读写权限都有的话那就应该是配置问题。

  经测试发现传很多网站程序时均报下500错误,后面上网查才明白,原来Godaddy的主机如果程序出错的话就直接报以下错误,即使你是刚上传的WordPress程序,因为WordPress默认是没有配置的,肯定会报错提示你输入配置信息,而这刚好与Godaddy的主机相冲突,所以就会报如下错误,解决方法很简单,如果你用的Windows IIS6或者IIS7主机,把以下代码复制下来,命名为web.config上传至网站根目录即可。
  我按如下方法上传到网站根目录后打开网站就进入了WordPress博客程序配置界面,配置完成后成功运行WordPress。
  Windows IIS6的用户使用下面的代码
<configuration>
    <system.web>
        <customErrors mode="Off"/>
        <compilation debug="true"/>
    </system.web>
</configuration>

  Windows IIS7的用户使用下面的代码

<configuration>
    <system.webServer>
        <httpErrors errorMode="Detailed" />
        <asp scriptErrorSentToBrowser="true"/>
    </system.webServer>
    <system.web>
        <customErrors mode="Off"/>
        <compilation debug="true"/>
    </system.web>
</configuration>

  以上代码保存为web.config上传至wordpress网站根目录即可。

wordpress清爽素雅主题

By admin, 2010年07月21日

 发现一个很清爽素雅的主题,news-magazine-theme-640,
演示网站:http://www.doriandeng.com/ 当然博主也整理的很干净。
敬一个。
news-magazine-theme-640.1.7

如何处理WordPress文章修订版本

By admin, 2010年05月25日

WordPress会自动保存你对文章的修改记录。 当你更新了某篇日志或页面后,WordPress会保留你更新前的日志(页面),让你可以在任何时候取回更新前的内容。 这些老旧的日志存根将作为历史记录,永远保留在数据库中,使用户能够看到对日志的所有改动。

在后台找到一篇文章进入编辑文章页面
在最下面会有如下信息
文章修订版本
2010年05月21日 @ 15:34 [自动保存] 由 admin
2010年05月21日 @ 15:31 由 admin
2010年05月21日 @ 15:30 由 admin

但有时候我们也需要对数据库进行一些整理。 每次对日志的修订都会使WordPress日志表中多出一行内容,而postmeta和term_relationships表中则可能会多出若干数据。 删除一些不必要的记录可以释放硬盘空间,同时减轻MySQL的加载负担。

删除之前的修订版本文章

首先要记住: 备份好你的数据库。 下面会直接在MySQL表上运行SQL语句

首先,找到在wp-config.php中规定的WordPress表前缀:

$table_prefix = 'wp_';

Wp_是默认表前缀,但你可以更改默认值,减少安全漏洞。 这里我们仍然将wp_作为默认的表前缀。

为了删除所有日志和页面的修改记录,请先打开一个MySQL管理工具(如phpMyAdmin)并运行以下语句:

DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision';

如果你更改了表前缀,请对代码中的“wp_”也做相应更改。

你也可以选择删除某一特定日期前的所有日志修改记录,例如下面的语句将删除2010年5月21日前的所有日志修改:

DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision' AND a.post_date < '2010-05-21';

MySQL的日期格式为年-月-日

禁用或限制日志修改记录

在WordPress的wp-config.php文件中添加以下代码,永久性关闭保留日志修改记录的功能:

define('WP_POST_REVISIONS', false);

可以将值设为“true”以便重新激活保留修改记录的功能。
或者你也可以用一个正整数来限制所允许的日志修改记录的数量:
下面的代码会为每篇日志保留至多5次修改记录,加上一次自动保存记录。 五次前的修改记录会被自动删除

define('WP_POST_REVISIONS', 5);

wordpress日志同步到QQ空间Qzone

By admin, 2010年04月22日

wordpress日志如何同步到QQ空间呢,这样QQ好友也能第一时间看到博文了

QQ 的服务是不会有 API 的,但是如何同步到 Qzone 呢?这里的过程有点曲折,由于 Qzone 支持通过你的 QQ 邮箱发布,而 QQ 邮箱有支持 SMTP 协议,而 WordPress 所包含的 PHPMailer 类可以使用 SMTP 发邮件,所以我们可以通过使用 PHPMailer 同步 WordPress 博客日志到 Qzone。

首先我们可以通过下面的函数登录 QQ 邮箱并给 Qzone 发邮件(你需要首先打开 QQ 邮箱的 SMTP 功能)。

function smtp_mailer_qqmail($subject,$body){
     $qq_number = '';
     $qq_password = '';

     if ( !class_exists('PHPMailer') ) {
         require_once ABSPATH . WPINC . '/class-phpmailer.php';
         require_once ABSPATH . WPINC . '/class-smtp.php';
     }
     $mail = new PHPMailer();

     $mail->IsSMTP();
     $mail->Mailer   = "smtp";
     $mail->CharSet  = 'utf-8';
     $mail->Encoding = 'base64';
     $mail->IsHTML(true);
     $mail->SMTPAuth = true;
     $mail->Host     = "smtp.qq.com";
     $mail->Username = $qq_number."@qq.com";
     $mail->Password = $qq_password;
     $mail->From     = $qq_number."@qq.com";
     $mail->FromName = $qq_number; 

     $mail->AddAddress($qq_number."@qzone.qq.com");
     $mail->Subject = $subject;
     $mail->Body    = $body;
     $mail->Send();
}
其中需要把 $qq_number$qq_password 设置成你的 QQ 号码和密码。

然后我们就可以通过 publish_post 这个 WordPress Hook,当发布日志的时候同步吧日志标题和内容同步到 Qzone。
add_action('publish_post', 'publish_post_2_qzone', 0);
function publish_post_2_qzone($post_ID){
     $qzone = get_post_meta($post_ID, 'qzone', true);
     if($qzone) return;

     $post_title = trim($_POST['post_title']);
     $post_except = trim($_POST['post_except']);
     if($post_except){
         $post_content = $post_except;
     }else{
         $post_content = mb_substr(strip_tags(trim($_POST['post_content'])),0,220);
     }
     $post_content= $post_content.'<br />查看全文:<a href="'.get_permalink($post_ID).'">'.get_permalink($post_ID).'</a>';

     smtp_mailer_qqmail($post_title,$post_content);

     add_post_meta($post_ID, 'qzone', 'true', true);
}

总结下:
打开 QQ 邮箱的 SMTP 功能。
下载同步到 Qzone 插件:WP2Qzone。
上传到 WordPress 插件目录中下并激活。
把插件中的 $qq_number 和 $qq_password 设置成你的 QQ 号码和密码。
这样只要你一发布日志就会自动更新到 Qzone 中。

WordPress首页第一篇文章加adsense广告

By admin, 2010年04月16日

如何在首页第一篇文章上加上环绕广告呢 :
操作如下:
找到<?php the_content(); ?>

注意:有的博客模板可能是这样用的
<?php the_content(__('Read more &raquo;')); ?>
<?php the_content(__('Continue reading','panorama') . ' &#39;' . get_the_title('', '', false) . '&#39;&raquo;'); ?>
这样的形式,总之 搜索<?php the_content( 就对了。

下列代码加在<?php the_content(); ?>前面:

<?php if ($wp_query->current_post == 0) : ?>
<div style="float:right; padding-bottom:10px;padding-top:10px;">
250*250 Adsense代码
</div>
<?php endif; ?>

这样出来的结果就是第一篇文章的环绕广告
下列代码加在<?php the_content(); ?>后面:

<?php if ($wp_query->current_post == 0) : ?>
<div style="padding-top:10px;text-align:center;">
336*280Adsense代码
</div>
<?php endif; ?>

这样的结果就是在第一篇文章的结尾加上广告;

这种方法不仅仅适用于首页,也适用于分类页面 和tag页面等。

WordPress更换主题对SEO收录的影响

By admin, 2010年04月9日

本人的这个域名下面有两个博客,一个就是现在这个,另一个是lwl0606.cmszs.com ,前几天修改lwl0606.cmszs.com 博客主题的文字颜色,为了能和google adsense的广告颜色

更兼容,结果把主题给改坏了,没办法从新安装主题吧,所用的主题有最新的版本就从新升级了一下。
升级主题之后 忘了加 description 和KEYWORDS ,原来是直接写在主题里面的,导致最近几天那个博客一直没有流量。
<meta name="description" content="" /> <meta name="KEYWORDS" content="" />

更换主题后,主题的结构不会和原来的完全相同,所以一般情况下尽量不要更换主题。

更改主题对SEO的影响:

1.由于模板代码的结构不同,输出的title也不同,有的是先输出“文章标题”,再输出“&&的博客”,有的是是先输出“文章标题”再输出“文章分类”,对于搜索引擎的收录会有很大的影响,轻则减少收录,重则K掉这篇文章。

2.就是本人犯的错误<meta name="description" content="" /> <meta name="KEYWORDS" content="" />,有的是直接从数据库调用,有的是直接写在主题里面的,更改时候往往会忘记。这也就是许多经常更换模板的网站,收录过低的直接原因。

如果你仍然坚持更换模板的话,请参考以下建议:

1.侧栏(sidebar)要重写。多数人对他们的侧栏做过很多变动,添加文字、广告、连接、widget等等。如果你使用的是支持widget的WP主题就没关系(即使主题更改widget仍然会保留)但如果你是手动更改的则需要重新来过。激活新主题前,保存你侧栏的所有代码(复制粘贴到某处OK)。切换主题时,编辑侧栏文件并保存。

2、换主题模板之前最好对代码进行比较一下,尤其是<title></title>和description部分,如果能在本地搭建运行环境对模板调试后上线,保持各部分内容与原版一致是最理想的方法之一;这里尤其是用WordPress的朋友注意,WP模板资源非常丰富,但 title有多种形式,简单办法直接把原模板header.php文件<title></title>和<meta name="description" ***** >复制到新模板上。这一点很关键哦!

3、重新加入统计跟踪代码。多数人用一些blog统计跟踪工具(如Google Analytics、103bees等)。这通常在加到header或者footer的一串代码。更换WP主题时因为header和footer会被覆 盖,你需要重新添加。否则统计不再生效。添加之后确认统计是否正常工作。
如果你在用Google Webmasters Tools也一样。Google Webmasters Tools需要你验证站点所属。可以通过上传一个文件(和跟更改WP主题无关)或者添加元标签(meta tag)代码到header文件。若是后者,请确认你已经将此代码正确添加。

4、侧边栏是否适合自己。我想,很多人都会对自己的边栏加已更改和修饰,换了新主题后,是否需要重新调整,这个要看你自己了哦!

5、检查以前的插件,是否适合现在主题。这个也是我后面才发现的问题,先是RSS订阅不能正常显示(显示的是空白),远程发布工具也不能连接。遇到这些问题能不郁闷吗?最后我通过关掉所有的插件,然后一个个开启排查,最终找到了个插件会引起上面的问题,于是就卸载了,问题也就解决了!

6,更新你的广告设计和颜色。如果你在用Google AdSense、Text-Link-Ads或其他任何形式的广告,注意新旧广告因为主题/颜色变动可能带来的不完美。如用Google AdSense 的话通过AdSense Deluxe就可简单更改WP的颜色。Text-Link-Ads的话你也可以编辑WP的插件来实现。

7,确认RSS feed订阅正常工作。相当重要的哦。

8,测试所有的二级特性。当一开始选择一个主题时你没有发现它的全部功能特性,包括页面、搜索、分类、归档。现在来仔细看一看或许会让你大吃一惊。比如,换新主题后我试了下搜索,发现搜索结果里没有包含文章摘要,那我就要改一改了。

9,用不同浏览器测试。多数人会忘记用多种浏览器测试,但这非常关键。如果你是用PC,可以很容易在Firefox和IE里测试。在Mac上可以用Firefox和Safari。

10,在你在blog上列出更改。告诉人们你更改了blog设计。收集反馈,从各种不同配置、分辨率、浏览器、屏幕尺寸等等的用户中了解你的主题究竟如何。提醒RSS读者也来参与一下。

wordpress 随机文章,随机日志,最新文章,最新评论

By admin, 2010年03月22日

wordpress 随机文章可以通过插件来实现 Random Posts,插件有其自身的弊端。
用代码函数来实现也是非常简单,所以没必要用插件,填上随机文章和最新文章后能够大大增加文章的内链。
1.随机文章

使用 WordPress 默认函数 get_posts 中的 orderby=rand 属性来随机选取文章链接。多篇文章并以列表形式展示,则代码如下:

<h4>随机文章</h4>
<?php $rand_post = get_posts('numberposts=10&orderby=rand');
foreach( $rand_post as $post ) : ?>
<li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>

以上代码随机选择 10 篇文章,列表样式可以根据需要自定义。
另一个版本 ,用query_posts生成随机文章列表。

<?php
query_posts(array('orderby' => 'rand', 'showposts' => 2));
if (have_posts()) :
while (have_posts()) : the_post();?>
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a>&nbsp;<?php comments_number('', '(1)', '(%)'); ?><br />
<?php endwhile;endif; ?>

如果你还想显示含有标题和文章摘要的随机文章,可以这样写
<?php
query_posts(array('orderby' => 'rand', 'showposts' => 1));
if (have_posts()) :
while (have_posts()) : the_post();
the_title(); //这行去掉就不显示标题,你当然不会这么做
the_excerpt(); //去掉这个就不显示摘要了
endwhile;
endif; ?>

 

2. 最新文章
WordPress最新文章的调用可以使用一行很简单的模板标签wp_get_archvies来实现. 代码如下:

<?php get_archives('postbypost', 10); ?> (显示10篇最新更新文章)

 <?php wp_get_archives('type=postbypost&limit=20&format=custom'); ?>

后面这个代码显示你博客中最新的20篇文章,其中format=custom这里主要用来自定义这份文章列表的显示样式。具体的参数和使用方法你可以参考官方的使用说明- wp_get_archvies。(fromat=custom也可以不要,默认以UL列表显示文章标题。)

补充: 通过WP的query_posts()函数也能调用最新文章列表, 虽然代码会比较多一点,但可以更好的控制Loop的显示,比如你可以设置是否显示摘要。具体的使用方法也可以查看官方的说明。
3. 最新留言,最新评论

下面是我之前在一个WordPress主题中代到的最新留言代码,具体也记不得是哪个主题了。该代码直接调用数据库显示一份最新留言。其中LIMIT 10限制留言显示数量。绿色部份则是每条留言的输出样式。

<?php
global $wpdb;
$sql = "SELECT DISTINCT ID, post_title, post_password, comment_ID,
comment_post_ID, comment_author, comment_date_gmt, comment_approved,
comment_type,comment_author_url,
SUBSTRING(comment_content,1,30) AS com_excerpt
FROM $wpdb->comments
LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID =
$wpdb->posts.ID)
WHERE comment_approved = '1' AND comment_type = '' AND
post_password = ''
ORDER BY comment_date_gmt DESC
LIMIT 10";
$comments = $wpdb->get_results($sql);
$output = $pre_html;

foreach ($comments as $comment) {
$output .= "\n<li>".strip_tags($comment->comment_author)
.":" . " <a href=\"" . get_permalink($comment->ID) .
"#comment-" . $comment->comment_ID . "\" title=\"on " .
$comment->post_title . "\">" . strip_tags($comment->com_excerpt)
."</a></li>";
}

$output .= $post_HTML;
echo $output;?>

在wordpress的后台--外观--小工具 里面 你也可以通过拖拽小工具订制边栏模板
一般的主题都有 最近文章 最近评论 的小工具。直接拖入即可实用。

如何添加wordpress相关日志

By admin, 2010年03月19日

 

在页面上面加上相关日志,能够大大增加浏览者在页面停留的事件,能够增加整个网站的浏览量。
如何给wordpress 添加相关日志呢,可以通过插件来实现,常用的插件是simple tag 和WordPress 2.3 Related Posts Plugin
插件虽好 会加重服务器的负担,有的时候还不及修改代码灵活。

下面就介绍几种修改代码 添加相关日志的方法。

如果要在文章后面添加相关日志,首先进入网站后台--外观--编辑 ,找到single.php模板,找到<?php comments_template(); ?> 这行代码
然后添加以下代码:
1、
基于标签添加相关日志

以下代码,基于标签列出5篇相关日志。

<?php
//for use in the loop, list 5 post titles related to first tag on current post
$tags = wp_get_post_tags($post->ID);
if ($tags) {
  echo '<h4>相关日志</h4>';
  $first_tag = $tags[0]->term_id;
  $args=array(
    'tag__in' => array($first_tag),
    'post__not_in' => array($post->ID),
    'showposts'=>5,
    'caller_get_posts'=>1
   );
  $my_query = new WP_Query($args);
  if( $my_query->have_posts() ) {
    while ($my_query->have_posts()) : $my_query->the_post(); ?>
      <p><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
      <?php
    endwhile;
  }
}
?>


在上面代码行'tag__in' => array($first_tag),中不难看出,如果有一篇文章添加了多个标签,所显示的相关日志只是符合第一个标签。要实现多标签的相关日志,只需要在添加一个新的Array,之后的代码如下:

<?php
  //for use in the loop, list 5 post titles related to first tag on current post
 $tags = wp_get_post_tags($post->ID);
 $tagIDs = array();
if ($tags) {
 $tagcount = count($tags);
   for ($i = 0; $i < $tagcount; $i++) {
      $tagIDs[$i] = $tags[$i]->term_id;
    }
   $args=array(
      'tag__in' => $tagIDs,
      'post__not_in' => array($post->ID),
      'showposts'=>5,
      'caller_get_posts'=>1
    );
   $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
      while ($my_query->have_posts()) : $my_query->the_post(); ?>
        <h3><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
      <?php endwhile;
    }
  }
?>


2、

基于分类

以下代码,基于分类显示3篇相关日志。
导出所有同分类下的文章,排除当前文章,显示其中3篇。

<?php $posts = get_posts('numberposts=3&category='.$category->cat_ID.'&exclude='.$current_post);
foreach($posts as $post) {
?>

加上相关日志widget标题和相关文章的内容摘要和发表日期,放在侧边栏,使用Conditional标签控制不同页面侧边栏内容输出。

<div>
<h2>相关日志</h2>
<ul>
<?php $posts = get_posts('numberposts=3&category='.$category->cat_ID.'&exclude='.$current_post);
foreach($posts as $post) {
?>
<li><a href="<?php the_permalink(); ?>" title="<?php the_title() ?>"><?php the_title() ?><br />
<span><?php the_excerpt(); ?><br /><em>&mdash;日期:<?php the_time('n/j/Y') ?></em></span></a>
</li>
<?php } ?>
</ul>
</div>

如果要放在侧边栏,在sidebar.php文件相应位置添加代码即可。