代码调用方法与技巧集锦,函数实现个性化评论框
分类:面向对象

前几天见到某 Blog (忘记名字和网址了) 有一个相当实用的评论功能. 访客留言之后资料输入框会被隐藏起来, 如同登录了一般. 访客可以选择修改相关资料再进行评论. 给予访客很好的用户体验. 今天我将这个功能移植到了自己的主题上, 制作不难, 分享一下吧.

WordPress模板基本文件

在制作Wordpress模版的时候,其中文章评论框是通过调用comment_form()函数即可实现,它将完成评论框的“姓名”、“电子邮件”、“站点”以及评论内容输入框和“提交”按钮的界面展示,但这个对于追求模版个性化的朋友来说,这肯定满足不了你的需求。

图片 1

复制代码代码如下:
style.css 样式表文件
index.php 主页文件
single.php 日志单页文件
page.php 页面文件
archvie.php 分类和日期存档页文件
searchform.php 搜索表单文件
search.php 搜索页面文件
comments.php 留言区域文件(包括留言列表和留言框)
404.php 404错误页面
header.php 网页头部文件
sidebar.php 网页侧边栏文件
footer.php 网页底部文件
WordPress Header头部 PHP代码

我最近正好遇到的一个问题,有些朋友不知道如何设置评论时所显示的头像,虽然我们单独发了一篇文章《[Gravatar]如何添加个性的博客评论头像?》来介绍如何设置,但文章很快就沉底了,每隔一段时间总要重复解答一次,也不可能将这篇文章置顶,因此,就想到在评论框处的“邮箱*”右侧增加一句文字描述“如何设置评论中的个性头像”,并将其链接到《[Gravatar]如何添加个性的博客评论头像?》,这样显得有助于提高用户体验:)

需求

注: 也就是位于

在网上找了下方法,需要用钩子来调用comment_form()函数,从而实现评论框自定义的效果,现在也实现了,为了避免后续模版的调整忘了这个方法,写这篇文章既分享给大家,也是作为备忘了,下面就直接贴代码介绍如何实现,有需要的朋友自己拿去折腾吧……

细心的朋友可能已经注意到了: 当在某个 WordPress 发表评论后再次访问该 Blog, 资料就不需要再次填写, 因为它们都已经在资料输入框里面. 但没评论过的或者清除了 Cookie 之后, 资料输入框将空空如也.

和之间的PHP代码

步骤一:打开你的模版中的comments.php文件。

  1. 当访客的资料已经存在的情况下, 访客很少关注资料本身, 那些资料输入框就会变成 "碍眼的东西", 我们要想办法将它们隐藏起来. 同时, 我们需要将这位访客的名字显示出来, 否则他/她根本不知道自己的身份.

  2. 访客有可能邮箱更换了, 或者就想换个酷点的名字, 此时的他/她肯定想更改一下那些资料. 所以要求有一些措施, 让访客可以重新看到资料输入框.

  3. 对于那些从未提供资料的访客, 资料输入框必须让他们看到.

复制代码代码如下:
网站标题
日志或页面标题
WordPress主题样式表文件style.css的相对地址
WordPress博客的Pingback地址
WordPress主题文件的相对地址
博客的Wordpress版本
WordPress博客的Atom地址
WordPress博客的RSS2地址
WordPress博客的绝对地址
WordPress博客的名称
网站的HTML版本
网站的字符编码格式

步骤二:找到comments.php中的comment_form(),将其替换为:

分析

WordPress 主体模板 PHP代码

[code lang=php]comment_form(array(fields = array(author = p class=comment-form-authorlabel for=author昵称/label span class=required*/spaninput type=text aria-required=true size=30 value=.$comment_author. name=author id=author/p,email = p class=comment-form-emaillabel for=email邮箱/label span class=required*a target=_blank href= 你的URL链接地址/a/spaninput type=text aria-required=true size=30 value=.$comment_author_email. name=email id=email/p,url = p class=comment-form-urllabel for=url站点/labelinput type=text size=30 value=.$comment_author_url. name=url id=url/p)));[/code]

由需求可以看到, 我们要处理的是两种状态的访客: 有资料的, 无资料的.
对于有资料的, 具有显示资料输入框 (显示昵称) 和 隐藏资料输入框 (显示昵称) 两种状态.
而无资料的访客只有显示资料输入框 (没有昵称) 一种状态.
好, 我们就为有资料的访客配备两个按钮 (更改和取消), 一个用来显示资料输入框, 一个用来隐藏它.

复制代码代码如下:
日志内容
确认是否有日志
如果有,则显示全部日志
结束PHP函数”while”
结束PHP函数”if”
header.php文件的内容
sidebar.php文件的内容
footer.php文件的内容
显示格式为”02-19-08″的日期
显示一篇日志的留言链接
显示一篇日志或页面的标题
显示一篇日志或页面的永久链接/URL地址
显示一篇日志或页面的所属分类
显示一篇日志或页面的作者
显示一篇日志或页面的ID
显示一篇日志或页面的编辑链接
显示Blogroll中的链接
comments.php文件的内容
显示一份博客的页面列表
显示一份博客的分类列表
下一篇日志的URL地址
上一篇日志的URL地址
调用日历
显示一份博客的日期存档列表
显示较新日志链接(上一页)和较旧日志链接(下一页)
显示博客的描述信息

思路

其它的一些Wordpress模板代码

  1. 页面怎么写? 编码前, 我们还应该理一下头绪. 用伪代码吧.

复制代码代码如下:
/%postname%/ 显示博客的自定义永久链接
搜索表单的值
打印输出信息
显示注册链接
显示登入/登出链接
在日志或页面中插入分页
截断日志
显示管理员的相关控制信息
显示载入页面的时间
显示载入页面查询

if (有资料的访客) {
    放置访客昵称
    放置更改按钮 (点击后: 隐藏更改按钮, 显示取消按钮, 显示资料输入框)
    放置取消按钮 (点击后: 显示更改按钮, 隐藏取消按钮, 隐藏资料输入框)
}
放置资料输入框
if (有资料的访客) {
    隐藏取消按钮
    隐藏资料输入框
}

  1. wordpress调用最新文章 Wordpress最新文章的调用可以使用一行很简单的模板标签wp_get_archvies来实现. 代码如下:
  1. 怎么获知访客是否评论过? 前面已经谈到, 已评论访客的资料会在显示出来, 也就是说, 代码中已经实现了获取资料的方法. 那我们找找吧...

复制代码代码如下:

就是它! $comment_author 是访客的昵称, 当它为空的时候就说明访客资料为空.

(显示10篇最新更新文章) 或者

  1. 有些控件又显示又隐藏的, 怎么弄呢? 我们不需要为此转跳页面, 用 JavaScript 吧. 我们可以写一个方法, 用来设定某些控件的显示与否, 只是一个很简单的方法:

    /**

    • 设定控件的显示风格
    • @param id 控件的 ID
    • @param status 控件的显示状态 (显示时为 '', 隐藏时为 'none') */ function setStyleDisplay(id, status) { document.getElementById(id).style.display = status; }

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

编码

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

接着干嘛? 大概可以写代码了. 看我的...

  1. wordpress调用随机文章
 function setStyleDisplay(id, status){document.getElementById(id).style.display = status;}


 %s.'), $comment_author) ?>






 <>







 <>



 <>



 <>

<>




 setStyleDisplay('hide_author_info','none');setStyleDisplay('author_info','none');

复制代码代码如下:
$rand_posts = get_posts('numberposts=10&orderby=rand');
foreach( $rand_posts as $post ) :
?>

访客评论显示欢迎信息

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

图片 2

复制代码代码如下:
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

".strip_tags($comment->comment_author)
.":" . " ID) .
"#comment-" . $comment->comment_ID . "" title="on " .
$comment->post_title . "">" . strip_tags($comment->com_excerpt)
."

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

4.wordpress调用相关文章

在文章页显示相关文章

复制代码代码如下:

$tags = wp_get_post_tags($post->ID);

if ($tags) {

$first_tag = $tags[0]->term_id;

$args=array(

'tag__in' => array($first_tag),

'post__not_in' => array($post->ID),

'showposts'=>10,

'caller_get_posts'=>1

);

$my_query = new WP_Query($args);

if( $my_query->have_posts() ) {

while ($my_query->have_posts()) : $my_query->the_post(); ?>

endwhile;

}

}

wp_reset_query();

?>

5.wordpress调用指定分类的文章

复制代码代码如下:

6.wordpress去评论者链接的评论输出

复制代码代码如下:

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,14) 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

".strip_tags($comment->comment_author)

.":" . " ID) .

"#comment-" . $comment->comment_ID . "" title="on " .

$comment->post_title . "">" . strip_tags($comment->com_excerpt)

."

";

}

$output .= $post_HTML;

echo $output;?>

7.wordpress调用含gravatar头像的评论输出

复制代码代码如下:

global $wpdb;

$sql = "SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved,comment_author_email, comment_type,comment_author_url, SUBSTRING(comment_content,1,10) 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 comment_author != '郑 永' 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

".get_avatar(get_comment_author_email('comment_author_email'), 18). " ID) . "#comment-" . $comment->comment_ID . "" title="" . $comment->post_title . " 上的评论">". strip_tags($comment->comment_author) .": ". strip_tags($comment->com_excerpt) ."

";

}

$output .= $post_HTML;

$output = convert_smilies($output);

echo $output;

?>

上面代码把comment_author的值改成你的ID,18是头像大小,10是评论数量。

8.wordpress调用网站统计大全

复制代码代码如下:
1、日志总数:

publish;?>
2、草稿数目:

draft; ?>
3、评论总数:

get_var("SELECT COUNT(*) FROM $wpdb->comments");?>
4、成立时间:

5、标签总数:

6、页面总数:

publish; ?>
7、分类总数:

8、链接总数:

get_var("SELECT COUNT(*) FROM $wpdb->links WHERE link_visible = 'Y'"); echo $link; ?>
9、用户总数:

get_var("SELECT COUNT(ID) FROM $wpdb->users"); echo $users; ?>
10、最后更新:

get_results("SELECT MAX(post_modified) AS MAX_m FROM $wpdb->posts WHERE (post_type = 'post' OR post_type = 'page') AND (post_status = 'publish' OR post_status = 'private')");$last = date('Y-n-j', strtotime($last[0]->MAX_m));echo $last; ?>

9.wordpress判断语句

is_single()
判断是否是具体文章的页面
is_single(’2′)
判断是否是具体文章(id=2)的页面
is_single(’Beef Stew’)
判断是否是具体文章(标题判断)的页面
is_single(’beef-stew’)
判断是否是具体文章(slug判断)的页面
comments_open()
是否留言开启
pings_open()
是否开启ping
is_page()
是否是页面
is_page(’42′)
id判断,即是否是id为42的页面
is_page(’About Me’)
判断标题
is_page(’about-me’)
slug判断
is_category()
是否是分类
is_category(’6′)
id判断,即是否是id为6的分类
is_category(’Cheeses’)
分类title判断
is_category(’cheeses’)
分类 slug判断
in_category(’5′)
判断当前的文章是否属于分类5
is_author()
将所有的作者的页面显示出来
is_author(’1337′)
显示author number为1337的页面
is_author(’Elite Hacker’)
通过昵称来显示当前作者的页面
is_author(’elite-hacker’)
下面是通过不同的判断实现以年、月、日、时间等方式来显示归档
is_date()
is_year()
is_month()
is_day()
is_time()
判断当前是否是归档页面
is_archive()
判断是否是搜索
is_search()
判断页面是否404
is_404()
判断是否翻页,比如你当前的blog是 显示的时候,这个判断将返 回真,通过这个函数可以配合is_home来控制某些只能在首页显示的界面,
例如:

复制代码代码如下:

//这里写你想显示的内容,包括函数

或者:

//这里写你想显示的内容,包括函数

10.wordpress非插件同步twitter

复制代码代码如下:

require_once (ABSPATH . WPINC . ‘/class-feed.php’);

$feed = new SimplePie();

$feed->set_feed_url(‘);

$feed->set_file_class(‘WP_SimplePie_File’);

$feed->set_cache_duration(600);

$feed->init();

$feed->handle_content_type();

$items = $feed->get_items(0,1);

foreach($items as $item) {

echo ‘@郑永: ‘.$item->get_description();

}

?>

代码中的agting改成你的twitter用户名,郑永改成你的名字。 另一种调用方法需要你的空间是国外主机:

复制代码代码如下:

// Your twitter username.

$username = "wange1228";

// Prefix - some text you want displayed before your latest tweet.

// (HTML is OK, but be sure to escape quotes with backslashes: for example href="link.html")

// Suffix - some text you want display after your latest tweet. (Same rules as the prefix.)

$suffix = "";

$feed = ":" . $username . "&rpp=1";

function parse_feed($feed) {

$stepOne = explode("", $feed);

$stepTwo = explode("", $stepOne[1]);

$tweet = $stepTwo[0];

$tweet = str_replace("

$tweet = str_replace(">", ">", $tweet);

return $tweet;

}

$twitterFeed = file_get_contents($feed);

echo stripslashes($prefix) . parse_feed($twitterFeed) . stripslashes($suffix);

?>

ZeroZ 总结了一下这个方法的特点:

1、非插件!

2、不用验证用户名和密码,也就是说你可以指定调用任何一个人的 tweet!

3、可以自定义 tweet 信息后显示的文字,就是 $suffix = “”; 这里!

4、只能调用最新的一条 tweet,刚好满足我的需求。

5、大概只有国外空间才能使用!(经我验证,确实如此)

11.wordpress 非插件调用评论表情

复制代码代码如下:

function wp_smilies() {

global $wpsmiliestrans;

if ( !get_option('use_smilies') or (empty($wpsmiliestrans))) return;

$smilies = array_unique($wpsmiliestrans);

$link='';

foreach ($smilies as $key => $smile) {

$file = get_bloginfo('wpurl').'/wp-includes/images/smilies/'.$smile;

$value = " ".$key." ";

$img = "图片 3";

$imglink = htmlspecialchars($img);

$link .= "{$img} ";

}

echo ''.$link.'<>';

}

?>

当访客评论时,会在 Cookie 中保存评论者的信息。我们可以通过 Firebug 或者 Chrome 的 Developer Tool 来查看:

>>> document.cookie
"comment_author_bbfa5b726c6b7a9cf3cda9370be3ee91=helloworld; comment_author_email_bbfa5b726c6b7a9cf3cda9370be3ee91=dangoakachan%40gmail.com; comment_author_url_bbfa5b726c6b7a9cf3cda9370be3ee91=http%3A%2F%2Fexample.com"

从上面可以看到有三个与评论相关的信息,它们分别是comment_author,comment_author_url,comment_author_email。不过中间夹杂着字符串 bbfa5b726c6b7a9cf3cda9370be3ee91,我们可以看下 default-constants.php 的代码,就可以知道这一段叫做 COOKIEHASH,它的值是博客 URL 的 md5值。

>>> import hashlib
>>> hashlib.md5('http://localhost/wordpress').hexdigest()
'bbfa5b726c6b7a9cf3cda9370be3ee91'

我们只需要了解到这一点就可以了,因为这些信息 WordPress 已经在comments_template方法中,通过wp_get_current_commenter为我们从 Cookie 中解析了访客的信息。例如,我们可以在 comment.php 文件中,直接用$comment_author来获取保存在 Cookie 中的访客姓名。

代码实现

接下来的实现就很简单了,我们通过判断$comment_author变量值是否为空,来确定访客是否在近期有评论(有 Cookie)。

if (!is_user_logged_in() && !empty($comment_author)) {
...
}

如果有,则在评论框上方显示欢迎信息:

if (!is_user_logged_in() && !empty($comment_author)) {
  $welcome_login = '欢迎回来, ' . $comment_author . '.';
  $welcome_login .= ' 更改 ';

  $comments_args['comment_field'] = '<>' . $comments_args['comment_field'];
  $comments_args['comment_notes_before'] = $welcome_login . '';
}

以上代码,需要添加到主题的 comment.php 文件 comment_form($comments_args) 方法调用之前。

接下来,我们通过 Javascript 来实现访客信息更改:

/* Toggle comment user */
$('#comments').on('click', '#toggle-author', function () { 
  $('#author-info').slideToggle(function () { 
    if ($(this).is(':hidden')) {
      /* Update author name in the welcome messages */
      $('#welcome-login strong').html($('#author').val());

      /* Update the toggle action name */
      $('#toggle-author u').html('更改');
    } else {
      /* Update the toggle action name */
      $('#toggle-author u').html('隐藏');
    }  
  }); 
}); 

这样,如果用户需要更新信息时,可以点击欢迎信息右侧的更改按钮;修改完成之后,用户信息会在评论后更新。

本文由10bet手机官网发布于面向对象,转载请注明出处:代码调用方法与技巧集锦,函数实现个性化评论框

上一篇:建站连串,wordpress常用插件推荐 下一篇:没有了
猜你喜欢
热门排行
精彩图文