分类
WordPress

为wp-t-wap插件新增在线回复功能

由于本站使用了wp-t-wap插件作为用户手机访问时节省流量和适合手机浏览的界面,因此不断的优化了wp-t-wap插件的在线功能。之前《实现wordpress手机访问:基于wp-t-wap非插件》一文实现了wp-t-wap插件新增文章别名和文章形式的功能,(请在文章中下载已经优化了的非插件形式的wap.zip)今天,我们实现wp-t-wap的在线回复留言功能。

wp-t-wap具有在线管理的功能,但作为管理员,却只能对新的评论进行审核,对文章进行评论,却不能对特定的某条留言进行回复。因此,乌徒帮wordpress联盟结合wordpress本身特性,新增了wp-t-wap插件在回复留言上的功能。为了让朋友们对这一功能的深入理解,本文先将该功能实现的步骤进行阐述,然后对wp-t-wap留言回复机制的实现稍加说明。

1、新增前台可视化回复框和回复链接:

1)在index-wap2.php中的

<?php if( my_get_option(“wap_show_related_posts”) == ‘yes’ and function_exists(‘wp23_related_posts’)): ?>
<!– Related Posts –>
<?php _wp23_related_posts(); ?>
<?php endif; ?>??

后添加以下这段代码,这样在浏览一篇文章时就有了留言功能

<?php $req = get_option(‘require_name_email’); ?>
<?php if (‘open’ == $post->comment_status) : ?>
<div id=”infoblock”><h2><?php _e(‘Post Comment’,’wap’) ?></h2></div>
<div>
<form action=”wap-comments-post.php” method=”post” id=”commentform”>
<?php if ( ! is_user_logged_in() ):?>
<p><label for=”author”><?php _e(‘Author’,’wap’) ?><?php if ($req) _e(‘(required)’,’wap’); ?></label><br/>
<input type=”text” name=”author” id=”author” value=”<?php echo $comment_author; ?>” size=”22″ tabindex=”1″ /></p>
<p><label for=”email”><?php _e(‘Mail (will not be published)’,’wap’) ?><?php if ($req) _e(‘(required)’,’wap’); ?></label><br/>
<input type=”text” name=”email” id=”email” value=”<?php echo $comment_author_email; ?>” tabindex=”2″ size=”22″ /></p>??
<p><label for=”url”><?php _e(‘Website’,’wap’) ?></label><br/>
<input type=”text” name=”url” id=”url” value=”<?php echo $comment_author_url; ?>” size=”22″ tabindex=”3″ /></p>
<?php endif;?>
<p><label for=”url”><?php _e(‘Comment’,’wap’) ?></label><br/>
<textarea name=”comment” id=”comment” cols=”20″ rows=”3″ tabindex=”4″ size=”22″></textarea>
</p>
<p><input name=”submit” type=”submit” id=”submit” tabindex=”5″ value=”<?php _e(‘Post Comment’,’wap’) ?>” />
<input type=”hidden” name=”comment_post_ID” value=”<?php echo $id; ?>” />
<input type=’hidden’ name=’comment_parent’ id=’comment_parent’ value='<?php if(isset($_GET[‘comment’]))echo $_GET[‘comment’];else echo 0; ?>’ />
<input type=”hidden” name=”redirect_to” value=”<?php echo ‘comments.php?p=’ . $id; ?>” />???????
</p>
<?php do_action(‘comment_form’, $post->ID); ?>
</form>
</div>
<?php endif; ?>

具体的细节将在实施步骤之后详解。http://www.utubon.com

2)在comments.php中做如下修改

?<?php foreach ($comments as $comment) : ?>

之后添加上:

?<?php if($_GET[‘comment’]&&$_GET[‘comment’]!=$comment->comment_ID) continue; ?>

往下找,在

?<?php
??????? if ( my_get_option(“wap_show_detail”) != ‘yes’ ){
??comment_text_rss();
??????? }else{
??????????????? if ( strlen( get_comment_text() ) > 0 ) :
??????????????????????? comment_text();
??????????????? else :
??????????????????????? comment_excerpt();
??????????????? endif;
???????? }
?>

之后添加上:

?<p><a href=”comments.php?p=<?php printf($p); ?>&comment=<? comment_ID(); ?>”>回复</a></p>

接着往下找,在<input name=”submit” type=”submit” id=”submit” tabindex=”5″ value=”<?php _e(‘Post Comment’,’wap’) ?>” />下方添加这段:

?<input type=’hidden’ name=’comment_parent’ id=’comment_parent’ value='<?php if(isset($_GET[‘comment’]))echo $_GET[‘comment’];else echo 0; ?>’ />

3)在wap-comments-post.php中修改如下信息:

在$comment_content= trim($_POST[‘comment’]);后面添加一行:

$comment_parent= trim($_POST[‘comment_parent’]);

另外,用下面的代码覆盖代替原来的代码

$commentdata = compact(‘comment_post_ID’, ‘comment_author’, ‘comment_author_email’, ‘comment_author_url’, ‘comment_content’,’comment_parent’, ‘comment_type’, ‘user_ID’);

4)修改functins.php:在

?echo ” | <a href=”” . wp_nonce_url(“comment.php?action=deletecomment&amp;dt=spam&amp;p=” . $comment->comment_post_ID . “&amp;c=” . $comment->comment_ID, ‘delete-comment_’ . $comment->comment_ID) . “” onclick=”return deleteSomething( ‘comment-as-spam’, $comment->comment_ID, ‘” . js_escape(sprintf(__(“You are about to mark as spam this comment by ‘%s’.n’Cancel’ to stop, ‘OK’ to mark as spam.”), $comment->comment_author)). “‘, theCommentList );”>” . __(‘Spam’,’wap’) . “</a> “;

后面添加一行:

?if ( ‘unapproved’!= $comment_status) echo ” | <a href=’comments.php?p=”.$comment->comment_post_ID.”&amp;comment=”.$comment->comment_ID.”‘>”.__(‘回复’,’wap’).”</a>”;

通过上面四步,就实现了wp-t-wap插件的在线回复功能,http://www.utubon.com接下来我们来稍稍分析以下wp-t-wap回复机制。

在wp-t-wap中调用了很多wordpress系统原函数,所以很多wordpress系统本身的函数可以在wp-t-wap中使用,你可以用function_exists(‘function_test’)来测试函数function_test()函数是否存在。而wp-t-wap回复也是调用了很多系统函数。

我们以管理员的身份在wap目录下登录,点击底部的管理评论,如果有未审核的评论,就会出现,并有功能选项“[删除 | 已审核 | 垃圾评论 ] ”,当我们做了上述4的修改后,这个选项就多了一项,变成“[删除 | 已审核 | 垃圾评论 | 回复 ] ”,多了回复功能。而且通过if ( ‘unapproved’!= $comment_status)的判断后,没有通过审核的评论是不能回复的(这和wordpress的评论机制有关,没有审核的评论回复是没有评论传递的)。

完成上文1的步骤之后,即使访客也可以在文章页留言评论。但这里的评论只是为了增加访客留言的便捷性,而不是本文要解决的对评论的回复。

上文的2和3步这是本文最核心的部分,2(修改comments.php)解决了给每个留言添加“回复”选项链接,点击该链接后,会获取一个新的地址,即?p=$post_id&comment=$comment_id,程序用if($_GET[‘comment’]&&$_GET[‘comment’]!=$comment->comment_ID) continue;判断是否选择某一项评论单独回复,如果存在comment地址参数,就会得到一个只有该条评论和回复框的页面,而该页面中的form拥有了<input type=’hidden’ name=’comment_parent’ id=’comment_parent’ value='<?php if(isset($_GET[‘comment’]))echo $_GET[‘comment’];else echo 0; ?>’ />,即父评论的ID,这样,只要提交这个form就让该评论成为回复对应comment_id评论的评论了。

3(修改wap-comments-post.php)则是对提交的评论做了新的处理,原来是不处理comment_parent属性的,修改后,根据表单传递的comment_parent值修改这条评论的父评论,从而确定了该评论是回复哪条评论的评论。

为了让这些评论显得有层次感和交流性,建议再做如下修改:

在2(修改comments.php)中修改以下内容:

if ($p > 0) {
?$comments = $wpdb->get_results(“SELECT comment_ID, comment_author, comment_author_email, comment_author_url, comment_date,?comment_content,comment_parent,comment_post_ID, $wpdb->posts.ID, $wpdb->posts.post_password FROM $wpdb->comments LEFT JOIN $wpdb->posts ON comment_post_ID = ID WHERE comment_post_ID = ‘$p’ AND $wpdb->comments.comment_approved = ‘1’ AND $wpdb->posts.post_status = ‘publish’ AND post_date < ‘”.current_time(‘mysql’).”‘ ORDER BY comment_date”);

} else {
?$comments = $wpdb->get_results(“SELECT comment_ID, comment_author, comment_author_email, comment_author_url, comment_date, comment_content,comment_parent,comment_post_ID, $wpdb->posts.ID, $wpdb->posts.post_password FROM $wpdb->comments LEFT JOIN $wpdb->posts ON comment_post_id = id WHERE $wpdb->posts.post_status = ‘publish’ AND $wpdb->comments.comment_approved = ‘1’ AND post_date < ‘”.current_time(‘mysql’).”‘ ORDER BY comment_date DESC LIMIT 10″);

即将两个$comments用上面的这些代码覆盖。

在<?php foreach ($comments as $comment) : ?>修改添加以下内容:

?<?php if($_GET[‘comment’]&&$_GET[‘comment’]!=$comment->comment_ID) continue;$comment_parent=$comment->comment_parent; ?>
?<div>
<a name=”comment-<?php comment_ID() ?>” ></a>
?<p>#<? comment_ID() ?> <? if($comment_parent){echo “回复#”;echo $comment_parent;}?> <?php _e(“Author”,”wap”) ?>: <a href=”<?php comment_author_url() ?>”><?php comment_author_rss() ?></a> <?php _e(“Time”,”wap”) ?>: <?php comment_time(get_option(‘date_format’).’ (‘.get_option(‘time_format’).’)’); ?></p>

通过上面这段代码的修改,你就可以看到在评论开头出现了“#12 回复#11”的字样,从而体现了这条评论属于一条对上面回复的评论。

好了wp-t-wap插件中实现评论在线回复的功能就讲到这里,如有不足之处,可以和frustigor交流。<完>

分类
WordPress

世界,您好!

欢迎使用WordPress。这是您的第一篇文章。编辑或删除它,然后开始写作吧!

分类
WordPress

[视频] 本地安装WAMPserver测试服务器环境搭载WordPress

有些朋友更希望使用WAMPserver作为本地测试环境,本视频为wordpress教程网提供的,可以了解如何在本地搭建wampserver环境,并在这个环境中搭建wordpress。

视频源地址 可以通过设置切换到高清画质观看。

分类
WordPress

wordpress中meta关键字和网页描述的设置

wordpress本身没有放置keywords和description的meta,虽然搜索引擎对这方面的要求已经明显降低,但最好meta标签无疑对seo有益无害。那么怎么为wordpress添加这两个meta呢?本文给出两种方法,原理都一样,即通过对当前页面的判断,获取当前页面的重要信息,将这些信息作为关键字和网页描述添加meta标签。

以下修改全部是对wordpress模板文件的header.php进行操作。

1、在<title>下方直接添加这些代码,当然将其中属于本站的内容修改为你自己的网站信息的内容:

<?php
if (is_home()){
$keywords = “utubon,乌图邦,自由开源,免费资源,免费网站空间,免费域名,网站建设入门,网站建设初学者,IT”;
$description = “utubon,中文称’乌图邦’,一个学习网站建设提供网络资源。乌图邦渴望给更多想要或刚刚进入网络,进行网站建设和网络经营的朋友带来一点帮助,我们为大家提供免费网站空间推荐,免费的域名,为广大网站建设入门提供帮助,为大家更好的认清IT事业做点贡献。”;
}
elseif (is_category()) {
$description = strip_tags(category_description().”utubon,乌图邦,知识经济,自由开源”);
$description = $description;
$keywords = single_cat_title(“”, false).”,utubon,乌图邦”;
}
elseif (is_single()){
if ($post->post_excerpt) {
$description = $post->post_excerpt;
}
else {
$description = substr(strip_tags($post->post_content),0,220);
}
$keywords = “”;
$tags = wp_get_post_tags($post->ID);
foreach ($tags as $tag ) {
$keywords = $keywords.$tag->name.”,”;
}
}
else {
$keywords = “utubon,乌图邦,知识经济,自由开源”;
$description = “utubon,中文称“乌图邦”,是一个自由开源的王国,在这里我们将用杂乱无章,来诠释知识经济时代的成功规律。加油吧!年轻的一代,这是我们的时代!”;
}
?>
<meta name=”keywords” content=”<?=$keywords?>” />
<meta name=”description” content=”<?=$description?>” />

这种方法简单,直接,推荐使用。

2、在网页开头加入下面的代码:

if(is_single()){
if ( have_posts() ) : while ( have_posts() ) : the_post();
$myExcerpt=dm_strimwidth(strip_tags(substr(get_the_excerpt(),0,-5)),0,200,”);
$myTags=get_the_tags();
$tag=”乌徒帮,wordpress,wordpress联盟,wordpress在线创造者”;
if($myTags) foreach($myTags as $tags) $tag=$tag.’,’.$tags->name;
$post_id=$post->ID;
$perlink=”?p=$post_id”;
endwhile; else:
$perlink=”;
endif;
}else if (is_category()) {
global $wp_query;
$cat_id = $wp_query->get_queried_object_id();
$cat = get_category($cat_id);
$cat_name=$cat->name;
$tag=$cat_name.”,乌徒帮,wordpress,wordpress联盟,wordpress在线创造者”;
$cat_des=$cat->description;
$myExcerpt=$cat_des.”乌徒帮wordpress联盟是一个专注于用wordpress搭建网站,进行深层网站建设的领地,力求通过乌徒帮让更多的朋友学会用wordpress建立自己的网站,帮助喜欢网络的朋友建立自己的网站空间。”;
$perlink=”?cat=$cat_id”;
}else{
$tag=”乌徒帮,wordpress,wordpress联盟,wordpress在线创造者”;
$myExcerpt=”乌徒帮wordpress联盟是一个专注于用wordpress搭建网站,进行深层网站建设的领地,力求通过乌徒帮让更多的朋友学会用wordpress建立自己的网站,帮助喜欢网络的朋友建立自己的网站空间。”;
$perlink=””;
}

再在<title>标签下面添加上

<meta name=”keywords” content=”<?=$tag?>” />
<meta name=”description” content=”<?=$myExcerpt?>” />

这种方法更细化,还能获取更多的信息,其中的$perlink指文章或分类的短连接形式,主要是用于手机访问时跳转,你可以不用理会,如果需要这项功能,可以下载乌徒帮secondary主题研究。<完>

分类
WordPress

wordpress分类描述支持图片

有的时候,我们希望在我们的分类页面打印分类描述,以此来介绍我们的分类。但在wordpress中,我们却无法在分类描述中使用图片,即<img>标签,那该怎么办呢?本文提供一段简短的代码,即可让你的分类描述框中的HTML代码按照你自己的意愿打印出来。废话不多说了,直接上代码。

remove_filter('pre_term_description', 'wp_filter_kses');

使用上面的这段及其简单的代码即可实现本文要实现的功能。将它加入到你的functions.php中,去感受一下效果吧。

分类
WordPress

wordpress分类栏目(category)调用函数集锦

乌徒帮自主研发的SEO TDK插件可以人性化的实现wordpress的title、keywords、description的设置,解除了新手们为处理wordpress的标题的烦恼,详情请看《WordPress SEO插件SEO TDK:一次性帮你解决Title、Keywords、Description》。


 

我们在wordpress的主题制作中会遇到很多需要对分类栏目(category)进行调用的方法,例如调用对应分类ID的分类名称及描述,根据分类名称调用别名等。本文较为全面的讲解wordpress中于分类栏目相关的各种函数和方法,通过本文的学习,你可以在今后的模板开发中完全自主的操作和调用分类信息。阅读本文的同时,你可以参考《wordpress函数大全:最简单最方便最全面的wordpress函数》《WordPress文章、栏目及他们关系的数据库表初步讲解》这两篇文章,从而或许更多的相关信息。本文花了一个晚上写作编辑完成,很是辛苦,希望朋友们积极参与文章讨论。另外,你可以通过“http://codex.wordpress.org/Function_Reference/is_category”(最后这里是函数名)这样的方法查看wordpress手册。

1、判断分类函数:判断该页是否为分类页

is_archive()、is_category()、is_paged()、in_category()

上面这三个函数可以帮助你判断访问的页面是否为归档(按时间)页、分类页或翻页的非第一页。一般的使用方法如“if(is_category()) echo ‘这是分类页’;”。在判断中,如果需要判断是否为特定ID或名称的分类,可以加入一个数组参数,如果is_category(array(9,’blue-cheese’,’Stinky Cheeses’));参数中可以是ID,也可以是分类名称(不是别名)。in_category()和is_category()用法一样,但意思和效果不一样。is_category()是判断页面,而in_category()判断的是文章,即该文章是否是ID或分类名为blue-cheese的文章。因此is_category()一般用在loop循环外面,而in_category()用在loop循环里居多。然而,只有当在single.php模板的文章页内,可以将in_category()放在loop循环外,判断该文章是否属于某个或某些分类。

2、根据分类名称获取分类ID函数:获取分类的ID

get_cat_ID($catname)

首先你要且只有获悉分类的分类名称,然后使用该函数。

3、根据分类ID获取分类的链接地址

get_category_link( $category_id )

有且只有获悉分类ID之后,才能使用该函数。当然,你可以使用上文的get_cat_ID()函数来先获取分类ID。

4、显示文章的分类信息

the_category(), the_category_rss(), single_cat_title(), category_description()、get_category_link()

the_category(?$separator,?$parents,?$post_id?):其中$separator指在多个分类的时候,两个分类之间用什么分隔如’, ‘这种方式,或直接给个空格;$parents指如果该分类是二级分类怎么显示,如果填写参数’multiple’则显示为“父分类/该分类”及其链接,如果填写参数’single’或不填,则只显示该分类及链接;$post_id指指定ID的文章,一般不填,指当前文章。

the_category_rss()指与rss相关,一般很少用,请看http://codex.wordpress.org/Function_Reference/the_category_rss。用的比较多的可能是get_the_category_rss()。

single_cat_title(?$prefix,?$display?):$prefix指输出分类名称前面要加点什么东西,如加入一个h2标题标签;$display默认为true,即直接显示分类标题,如果填入false的话,就赋值给某变量,例如可以用$cat_title=single_cat_title(”,false);来获取当前文章的分类名称。

echo category_description( $category_id ):$category_id不填为当前文章。注意前面需要加echo来显示分类描述。你可以学习上面的方法用$cat_des来接收分类描述,官方还提供了echo category_description( get_category_by_slug(‘category-slug’)->term_id )的用法。

get_category_link($category_id):如果不填入分类ID作为参数,那么显示当前文章的分类的链接。

分类
WordPress

在wordpress编辑器中使用Tab键实现缩进

在wordpress编辑器中,我们似乎无法使用Tab键来实现代码或一些特殊行的缩进,今天介绍一段代码,可以帮助你实现在后台编辑器中使用Tab键来实现缩进。

<?php /* Plugin Name: Tabs In Editor Plugin URI: http://www.utubon.com/wordpress-editor-tab-key-indent/ Description: 在wordpress后台编辑器中使用Tab键 Version: 1.0.1 Author: 否子戈 Author URI: http://www.utubon.com */ if(strpos($_SERVER['PHP_SELF'], '-new.php')|| $_REQUEST['post'] != ''){  add_action('admin_footer', 'add_indent'); }  function add_indent(){ ?? ??> ?? ?<script language="JavaScript" type="text/javascript"><!-- ?? ??? ?eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'/w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('/b'+e(c)+'/b','g'),k[c])}}return p}('(l($,D,W,1o){4 c;4 T;4 B='/n';$.1i.1s=l(){c=U;T=c[0];6(!$.v.12)c.1f(A);a c.1l(A);6($.v.19||$.v.12)B='/r/n';H U};$.1i.1q=l(){c=U;6(!$.v.12)c.1j('1f',A);a c.1j('1l',A);c=k;T=k;H U};l A(e){6(e.1g==13){4 5=d().5;4 F=T.2.7(0,5).11('/n');F=(F==-1?0:F+1);4 y=T.2.7(F,5).f(/^/t+/g);6(y!=k){e.1h();4 N=16();4 C=B;1u(4 i=0;i<y[0].b;i++)C+='/t';T.2=T.2.7(0,5)+C+T.2.7(5);z(5+C.b,5+C.b);14(N)}}a 6(e.1g==9){e.1h();4 N=16();4 3=d();6(3.5!=3.8&&T.2.Y(3.5,1)=='/n')3.5++;4 y=T.2.7(3.5,3.8).f(//n/g);6(y!=k){4 q=T.2.7(0,3.5).11(B);4 u=(q!=-1?q:0);6(!e.1k){4 p=T.2.7(u,3.8).S(//n/g,'/n/t');T.2=(q==-1?'/t':'')+T.2.7(0,u)+p+T.2.7(3.8);z(3.5+1,3.8+y.b+1)}a{4 i=(T.2.Y((q!=-1?q+B.b:0),1)=='/t'?1:0);4 X=T.2.7(u,3.8).f(//n/t/g,'/n');6(q==-1&&T.2.Y(0,1)=='/t'){T.2=T.2.Y(1);X.1n(0)}4 p=T.2.7(u,3.8).S(//n/t/g,'/n');T.2=T.2.7(0,u)+p+T.2.7(3.8);z(3.5-i,3.8-(X!=k?X.b:0))}}a{6(!e.1k){T.2=T.2.7(0,3.5)+'/t'+T.2.7(3.5);z(3.5+1,3.5+1)}a{4 w=T.2.7(0,3.5).11('/n');4 o=(w==-1?0:w);4 h=T.2.7(o+1).1H('/n');6(h==-1)h=T.2.b;a h+=o+1;6(w==-1){4 f=T.2.7(o,h).f(/^/t/);4 p=T.2.7(o,h).S(/^/t/,'')}a{4 f=T.2.7(o,h).f(//n/t/);4 p=T.2.7(o,h).S(//n/t/,'/n')}T.2=T.2.7(0,o)+p+T.2.7(h);6(f!=k)z(3.5-(3.5-1>w?1:0),3.8-((3.5-1>w||3.5!=3.8)?1:0))}}14(N)}}l 16(){H{O:c.O(),Q:T.Q}}l 14(15){c.O(15.O+T.Q-15.Q)}l z(5,8){6(!$.v.19){T.1z(5,8);c.1w()}a{4 G=T.2.7(0,5).f(//r/g);G=(G!=k?G.b:0);4 E=T.2.7(5,8).f(//r/g);E=(E!=k?E.b:0);4 3=T.1a();3.1E(s);3.1D('M',5-G);3.V('M',8-5-E);3.1B()}};l d(){6(!$.v.19){H{5:T.1A,8:T.1C}}a{4 d=D.1I.1F().1v();4 j=D.1d.1a();j.1m(T);j.1e("1r",d);4 m=D.1d.1a();m.1m(T);m.1e("P",d);4 J=1b,L=1b,I=1b;4 1c,K,18,R,Z,10;1c=K=j.x;18=R=d.x;Z=10=m.x;1G{6(!J){6(j.17("P",j)==0){J=s}a{j.V("M",-1);6(j.x==1c){K+="/r/n"}a{J=s}}}6(!L){6(d.17("P",d)==0){L=s}a{d.V("M",-1);6(d.x==18){R+="/r/n"}a{L=s}}}6(!I){6(m.17("P",m)==0){I=s}a{m.V("M",-1);6(m.x==Z){10+="/r/n"}a{I=s}}}}1x((!J||!L||!I));H{5:K.b,8:K.b+R.b}}}})(1t,1p,1y);',62,107,'||value|range|var|start|if|substring|end||else|length|textarea|selection_range||match||i_e||before_range|null|function|after_range||i_s|tab|index||true||start_tab|browser|i_o|text|matches|set_focus|key_handler|lb|tabs||m_e|line|m_s|return|after_finished|before_finished|untrimmed_before_text|selection_finished|character|scroll_fix|scrollTop|StartToEnd|scrollHeight|untrimmed_selection_text|replace||this|moveEnd||removed|substr|after_text|untrimmed_after_text|lastIndexOf|opera||fix_scroll|obj|fix_scroll_pre|compareEndPoints|selection_text|msie|createTextRange|false|before_text|body|setEndPoint|keydown|keyCode|preventDefault|fn|unbind|shiftKey|keypress|moveToElementText|push|undefined|document|unindent|EndToStart|indent|jQuery|for|duplicate|focus|while|window|setSelectionRange|selectionStart|select|selectionEnd|moveStart|collapse|createRange|do|indexOf|selection'.split('|'),0,{})) ?? ??? ?function toggle_editor_tabs(e){ ?? ??? ??? ?if(jQuery(e).data('disabled') != 1){ ?? ??? ??? ??? ?jQuery(e).data('disabled',1); ?? ??? ??? ??? ?jQuery(e).attr('value','Enable Tabs'); ?? ??? ??? ??? ?jQuery("textarea#content").unindent(); ?? ??? ??? ?}else{ ?? ??? ??? ??? ?jQuery(e).data('disabled',0); ?? ??? ??? ??? ?jQuery(e).attr('value','Disable Tabs'); ?? ??? ??? ??? ?jQuery("textarea#content").indent(); ?? ??? ??? ?}  ?? ??? ?}  ?? ??? ?jQuery(document).ready(function () { ?? ??? ??? ?jQuery("#ed_toolbar").append('<input id="ed_tabs" type="button" value="Disable Tabs" onclick="toggle_editor_tabs(this)";/>'); ?? ??? ??? ?jQuery("textarea#content").indent();  ?? ??? ?}); ?? ?//--></script> ?? ?<?php } ?>

需要声明的是,这是一个来自老外的插件内的代码,原文请阅读这里

不过可惜的是这个功能只能在HTML模式下实现,而不能在可视化模式下实现。

分类
WordPress

利用feedsky为wordpress烧制博客rss源

网络上有些朋友问我wordpress怎么制作像http://feed.utubon.com的wordpress的rss,其实这是通过feedsky制作,并绑定域名而完成的。今天,乌徒帮就来介绍一下利用feedsky为wordpress烧制博客rss源的具体过程,让你的博客拥有多种多样的被订阅方式。

1、注册和登录feedsky:进入feedsky首页http://www.feedsky.com,如果你已经拥有账户,直接登录,如果没有账户,需要注册。当然,你可以先输入你的博客地址,下一步,到系统提示注册的时候再注册不迟。

2、登录或注册之后,进入到管理首页。系统会将你已经拥有的博客源陈列出来,你可以添加新的源。如下图:

3、下一步,选择使用哪一个rss源,一般情况下wordpress会有很多rss源,如/feed/、评论rss等等。我们选择/feed/当然,这是我设置了固定链接的情况下,如果没有设置固定链接,或是其他形式的固定链接,你稍作判断即可。选好后下一步:

4、设置feed信息,即你要烧制成的feed的名称、关键字等信息。其中永久feed地址很重要,是不能修改的。如下图:

5、添加成功,进入管理面板。点击底部的进入feed管理,开始发布feed。

6、进入管理之后,你就能看到feedsky的所有功能了。这些功能实现了feed几乎所有的需求。

feed统计:查看自己这项feed的统计数据,如订阅数,更新情况,被谁订阅,通过什么渠道订阅等。

feed优化:包括烧制成功后的模板,可以通过系统为你提供的永久网址查看效果,包括分享、域名绑定、互动等优化功能。

feed发布:这是本文的最重点,因为你使用feedsky的最终目的是发布自己的feed。feed订阅图标可以为你建立一系列的图片,并发放代码,你将代码稍加修改直接放在博客模板文件或挂件中即可。还包括手机、邮件等订阅方式。

feed的js输出:相当于调用feedsky的数据,并显示出来。通过给你一段js代码,你可以将它放在任何地方,别人访问的时候,就能看到你的博客被feedsky烧制后的最新文章。乌徒帮很多演示页面就使用了该功能,以让访客能获悉乌徒帮最新文章。

效果如下:

广告管理和读者读者调查是附加功能,你可以使用,也可以不使用,如果你的博客文章质量很高,可读性很强,可以尝试用feedsky赚钱。<完>

分类
WordPress

wordpress feed rss 标题重复

在我们一些开发中,偶尔发现我们的feed首页出现了重复标题的现象,有的是<title>blogname.blogname</title>,有的是其他形式,但总之不是我们所希望的。下图是我的博客中发生的现象:

wordpress feed rss 标题重复

引起这一现象的原因,大部分是由于使用了一些SEO插件或相关的主题功能,例如我的这个问题就是由于使用了本人开发的“超级插件”引起的。

我们从内在机制来剖析这个问题,在rss的<title>部分,其实仍然是使用的wp_title机制,只不过,在is_feed=true的情况下,feed和真实的页面产生了对应关系。我们可以使用下面的方法来修正这个问题。

add_filter('wp_title_rss','__return_false');

wp_title_rss钩子可以处理rss输出的页面标题。同时,我们其实还有一个函数:bloginfo_rss(‘name’)也可以在这个问题中发挥作用,看你面对的是什么问题,由于我的问题比较简单,使用上面这个代码即可解决。

如果你发现通过这种方法还不能实现,那么你可以暴力手段解决,在wp-includes/feed-rss.phpwp-includes/feed-rss2.php中的第一个<title>中,去掉bloginfo_rss(‘name’);wp_title_rss();其中之一,这个时候再测试。

最终,我发现,bloginfo_rss,wp_title_rss函数都是在wp-includes/feed.php中定义,如果你需要再深入的研究这个问题,可以去阅读它们的源码。

分类
WordPress

wordpress中$wpdb类详解

在《wordpress中使用$wpdb->get_results()执行sql语句操作数据库》一文中,我们提到了用$wpdb来操作数据库,今天就详细介绍一下$wpdb这个用于操作数据库的函数类。

在主题的制作中,不可直接调用wpdb类中的方法,应使用全局变量$wpdb。WordPress提供一个全局变量$wpdb,该全局变量是负责与WordPress数据库交流的类的实例化。(在自定义函数中使用$wpdb前,请记住全局化$wpdb:global $wpdb;)

可以用$wpdb对象从任何一个WordPress数据库表(而非仅仅标准数据库表)中读取数据。例如,如果你需要从一个名为“mytable”的自定义表中查询一些信息,可以使用以下代码:

$myrows = $wpdb->get_results( “SELECT id, name FROM
mytable” );

$wpdb对象可以与任何数量的数据库表交流,但这些数据库表只能来自一个数据库——WordPress数据库。如果你要连接到其它数据库(极少情况),那么你就需要用相应的连接细节信息从wpdb类中将你的对象实例化。如果需要设置多个数据库,可以考虑使用
hyperdb

$wpdb是一个全局变量,包含多个关于数据库查询函数:

$wpdb -> get_results(‘query’);

$wpdb->query(‘query’);

$wpdb->get_var(‘query’,column_offset,row_offset);

$wpdb->get_row(‘query’, output_type,
row_offset);

$wpdb->get_col(‘query’,column_offset);

$wpdb->get_results(‘query’, output_type);

$wpdb->insert( $table, $data, $format );

$wpdb->update( $table, $data, $where, $format =
null, $where_format = null );

$wpdb->prepare( ‘query’ [, value_parameter,
value_parameter … ] );

$wpdb->show_errors();

$wpdb->hide_errors();

$wpdb->print_error();

$wpdb->get_col_info(‘type’, offset);

$wpdb->flush();

参考手册:http://codex.wordpress.org/Function_Reference/wpdb_Class