好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

给WordPress中的留言加上楼层号的PHP代码实例

最近突然发现博客的 评论 楼层有点问题,之前一直设置的是[在每个页面顶部显示新的评论],也就是所谓的倒序显示评论,但是主题只支持顺序的评论楼层好,于是楼层和楼层号之间对不上。搜了一下在zww.me发现有实现的代码,但是放到博客之后无法正常工作,比如限制分页显示为25条的时候,文章只有一条评论时也显示的25楼。折腾了一下搞定了,做个记录,也供大家参考。

在主题文件 functions.php中找到$GLOBALS['comment'] = $comment;在后面加上下面的代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

/* 主评论计数器 */

  global $commentcount , $wpdb , $post ;

  if (! $commentcount ) { //初始化楼层计数器

   if ( get_option( 'comment_order' ) === 'desc' ) { //倒序

   $comments = $wpdb ->get_results( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID AND comment_type = '' AND comment_approved = '1' AND !comment_parent" );

   $cnt = count ( $comments ); //获取主评论总数量

   $page = get_query_var( 'cpage' ); //获取当前评论列表页码

   $cpp =get_option( 'comments_per_page' ); //获取每页评论显示数量

   if ( ceil ( $cnt / $cpp ) == 1 || ( $page > 1 && $page == ceil ( $cnt / $cpp ))) {

    $commentcount = $cnt + 1; //如果评论只有1页或者是最后一页,初始值为主评论总数

   } else {

    $commentcount = $cpp * $page + 1;

   }

   } else { //顺序

   $page = get_query_var( 'cpage' )-1;

   $cpp =get_option( 'comments_per_page' ); //获取每页评论数

   $commentcount = $cpp * $page ;

   }

  }

/* 主评论计数器 end */

  if ( ! $parent_id = $comment ->comment_parent ) {

   $commentcountText = '<div class="floor">' ;

   if ( get_option( 'comment_order' ) === 'desc' ) { //倒序

   $commentcountText .= -- $commentcount . '楼' ;

   } else {

   switch ( $commentcount ) {

    case 0:

    $commentcountText .= '<span>沙发!</span>' ; ++ $commentcount ;

    break ;

    case 1:

    $commentcountText .= '<span>板凳!</span>' ; ++ $commentcount ;

    break ;

    case 2:

    $commentcountText .= '<span>地板!</span>' ; ++ $commentcount ;

    break ;

    default :

    $commentcountText .= ++ $commentcount . '楼' ;

    break ;

   }

   }

   $commentcountText .= '</div">' ;

  }

  }

然后在合适的位置加上以下代码输出楼层号

?

1

<?php echo $commentcountText ; //主评论楼层号 - by zwwooooo ?>

修改之后的代码应该是这样的(以官方最新的 wp_list_comments() 回调函数代码为例):

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

<?php

function mytheme_comment( $comment , $args , $depth ) {

  $GLOBALS [ 'comment' ] = $comment ;

  /* 主评论计数器 by zwwooooo Modified Gimhoy(http://blog.gimhoy.com) */

  global $commentcount , $wpdb , $post ;

  if (! $commentcount ) { //初始化楼层计数器

   if ( get_option( 'comment_order' ) === 'desc' ) { //倒序

   $comments = $wpdb ->get_results( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID AND comment_type = '' AND comment_approved = '1' AND !comment_parent" );

   $cnt = count ( $comments ); //获取主评论总数量

   $page = get_query_var( 'cpage' ); //获取当前评论列表页码

   $cpp =get_option( 'comments_per_page' ); //获取每页评论显示数量

   if ( ceil ( $cnt / $cpp ) == 1 || ( $page > 1 && $page == ceil ( $cnt / $cpp ))) {

    $commentcount = $cnt + 1; //如果评论只有1页或者是最后一页,初始值为主评论总数

   } else {

    $commentcount = $cpp * $page + 1;

   }

   } else { //顺序

   $page = get_query_var( 'cpage' )-1;

   $cpp =get_option( 'comments_per_page' ); //获取每页评论数

   $commentcount = $cpp * $page ;

   }

  }

  /* 主评论计数器 end */

  if ( ! $parent_id = $comment ->comment_parent ) {

   $commentcountText = '<div class="floor">' ;

   if ( get_option( 'comment_order' ) === 'desc' ) { //倒序

   $commentcountText .= -- $commentcount . '楼' ;

   } else {

   switch ( $commentcount ) {

    case 0:

    $commentcountText .= '<span>沙发!</span>' ; ++ $commentcount ;

    break ;

    case 1:

    $commentcountText .= '<span>板凳!</span>' ; ++ $commentcount ;

    break ;

    case 2:

    $commentcountText .= '<span>地板!</span>' ; ++ $commentcount ;

    break ;

    default :

    $commentcountText .= ++ $commentcount . '楼' ;

    break ;

   }

   }

   $commentcountText .= '</div">' ;

  }

  }

 

  extract( $args , EXTR_SKIP);

 

  if ( 'div' == $args [ 'style' ] ) {

  $tag = 'div' ;

  $add_below = 'comment' ;

  } else {

  $tag = 'li' ;

  $add_below = 'div-comment' ;

  }

?>

  <<?php echo $tag ?> <?php comment_class( empty ( $args [ 'has_children' ] ) ? '' : 'parent' ) ?> id= "comment-<?php comment_ID() ?>" >

  <?php if ( 'div' != $args [ 'style' ] ) : ?>

  <div id= "div-comment-<?php comment_ID() ?>" class = "comment-body" >

  <?php endif ; ?>

  <div class = "comment-author vcard" >

  <?php if ( $args [ 'avatar_size' ] != 0) echo get_avatar( $comment , $args [ 'avatar_size' ] ); ?>

  <?php printf(__( '<cite class="fn">%s</cite> <span class="says">says:</span>' ), get_comment_author_link()) ?>

  </div>

<?php if ( $comment ->comment_approved == '0' ) : ?>

  <em class = "comment-awaiting-moderation" ><?php _e( 'Your comment is awaiting moderation.' ) ?></em>

  <br />

<?php endif ; ?>

 

  <div class = "comment-meta commentmetadata" ><a href= "<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>" >

  <?php

   /* translators: 1: date, 2: time */

   printf( __( '%1$s at %2$s' ), get_comment_date(), get_comment_time()) ?></a><?php edit_comment_link(__( '(Edit)' ), ' ' , '' );

  ?>

  </div>

 

  <?php comment_text() ?>

 

  <div class = "reply" >

  <?php comment_reply_link( array_merge ( $args , array ( 'add_below' => $add_below , 'depth' => $depth , 'max_depth' => $args [ 'max_depth' ]))) ?>

  </div>

 

  <?php echo $commentcountText ; //主评论楼层号 - by zwwooooo ?>

 

  <?php if ( 'div' != $args [ 'style' ] ) : ?>

  </div>

  <?php endif ; ?>

<?php

  }

样式就自己添加吧~~

查看更多关于给WordPress中的留言加上楼层号的PHP代码实例的详细内容...

  阅读:42次