虽然我一直用的是Wordpress自带的TwentyFourteen主题,但是其实还是自己改动了很多地方的。以致于时间一长就有些功能是在哪改的都忘了,比如之前直接输入https://youthlin.com/links
的话会跳转到首页,得从站内点击才能打开这个链接页面。之前也一直没在意,上周觉得这样不好,因为我发布一个页面https://youthlin.com/?page_id=1183
直接打开会跳到首页而不是打开页面。额(-。-;)于是打算重整一下主题了。
计划一是自己写个主题,然而技术还不到家现在也没时间。
计划二就是改用子主题啦。
通过子主题可以把网上流传的各种(通过在
functions.php
添加代码的)特性集成到博客中,而又不需要修改原主题,即使原主题升级了也不会被覆盖。
子主题很早就知道啦,可以看看WP大学的文章简单了解下:使用WORDPRESS的子主题功能修改你的WORDPRESS主题
首先是style.css
, 按照模板写就行了,不过不推荐用@import
方式导入原主题样式,建议把原来的样式压缩一下直接粘贴过来,用在线网站就能压缩CSS百度一下很多的。这样能稍微提高下打开网站的速度。然后自己要自定义的样式写在他后面就行。
下面说说functions.php
的内容,Wordpress大学那片文章说子主题的functions.php
比原主题先载入(而style.css
是替换原主题的样式表)。这个不是很要紧,反正他不会覆盖就行了,也就是不用把原来的拷贝过来。
于是,很多自定义的功能就可以都加在子主题的这个functions.php
里。比如:
- 替换Google字体
- 评论回复通知(网上流传的使用comments-ajax.php的版本)
- 登录页面添加验证码、添加参数
- 替换默认的Emoji地址
- 添加自定义表情支持
- 添加自定义小工具,如带头像的近期评论、随机文章
- 在header, footer添加自定义代码,如添加返回顶部、滚到底部、定位到评论的功能;评论分页ajax载入的功能。
以上部分内容可参见:
- 不修改源文件优化’近期评论’小工具(带头像哦)
- WordPress分页评论AJAX载入
- 更新了下页面底部(添加返回顶部固定浮动条)
提醒:需要注意的是路径问题。(这个示例的子主题文件夹名称是2014)
下面是functions.php
的内容:
<?php //start//http://blog.wpjam.com/m/postviews-for-admin/ //统计浏览量,配合WP-PostViews插件 add_filter('manage_posts_columns', 'postviews_admin_add_column'); function postviews_admin_add_column($columns){ $columns['views'] = __('Views'); return $columns; } add_action('manage_posts_custom_column','postviews_admin_show',10,2); function postviews_admin_show($column_name,$id){ if ($column_name != 'views') return; $post_views = get_post_meta($id, "views",true); echo $post_views; } //end------------------------------------------------------ //更改作者链接//默认为https://youthlin.com/author/用户名 //https://codex.wordpress.org/Plugin_API/Filter_Reference/author_link add_filter( 'author_link', 'modify_author_link', 10, 1 ); function modify_author_link( $link ) { $link = 'https://youthlin.com/'; return $link; } //end------------------------------------------------------- //网络字体替换。用add_filter function my_font_url() { $font_url = ''; if ( 'off' !== _x( 'on', 'Lato font: on or off', 'twentyfourteen' ) ) { $font_url = add_query_arg( 'family', urlencode( 'Lato:300,400,700,900,300italic,400italic,700italic' ), "//fonts.useso.com/css" ); //http://doufu.me/tofu/219.html http://www.amznz.com/fonts-googleapis-com-load-slow/ } return $font_url; } add_filter('twentyfourteen_font_url','my_font_url'); //end------------------------------------------------------- //评论回复电邮通知 function comment_mail_notify($comment_id) { $admin_notify = '1'; // admin 要不要收回复通知 ( '1'=要 ; '0'=不要 ) $admin_email = get_bloginfo ('admin_email'); // $admin_email 可改为你指定的 e-mail. $comment = get_comment($comment_id); $comment_author_email = trim($comment->comment_author_email); $parent_id = $comment->comment_parent ? $comment->comment_parent : ''; global $wpdb; if ($wpdb->query("Describe {$wpdb->comments} comment_mail_notify") == '') $wpdb->query("ALTER TABLE {$wpdb->comments} ADD COLUMN comment_mail_notify TINYINT NOT NULL DEFAULT 0;"); if ( ($comment_author_email != $admin_email && isset($_POST['comment_mail_notify'])) || ($comment_author_email == $admin_email && $admin_notify == '1') ) $wpdb->query("UPDATE {$wpdb->comments} SET comment_mail_notify='1' WHERE comment_ID='$comment_id'"); $notify = $parent_id ? get_comment($parent_id)->comment_mail_notify : '0'; $spam_confirmed = $comment->comment_approved; if ($parent_id != '' && $spam_confirmed != 'spam' && $notify == '1') { $wp_email = 'no-reply@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])); // e-mail 发出点, no-reply 可改为可用的 e-mail. $to = trim(get_comment($parent_id)->comment_author_email); $subject = '您在 [' . get_option("blogname") . '] 的留言有了回复'; $message = ' <div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px;"> <p><strong>' . trim(get_comment($parent_id)->comment_author) . '</strong>, 您好!</p> <p>您曾在《' . get_the_title($comment->comment_post_ID) . '》的留言:<br /><div style="color:#060;background-color:#cc3;padding:20px 20px;box-shadow: 10px 10px 5px #123;border-radius:20px;" > ' . trim(get_comment($parent_id)->comment_content) .'</div></p> <p><strong>' . trim($comment->comment_author) . ' </strong>.给您的回复:<br /><div style="border-radius:25px;color:#000;background-color:#090;box-shadow: 5px 10px 5px #321;padding:20px 20px;margin-top:20px;"> ' . trim($comment->comment_content) . ' </div><br /></p> <p>您可以<a href="' . htmlspecialchars(get_comment_link($parent_id)) . '"><strong style="color:#22f;background-color:#cc3;border-radius:20px;">点击查看回复的完整內容</strong></a></p> <p>欢迎再度光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a></p> <p>(此邮件由系统自动发送,请勿回复.)</p> </div>'; //样式是自己写的 Youth.霖 https://youthlin.com/ $from = "From: \"" . get_option('blogname') . "\" <$wp_email>"; $headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n"; wp_mail( $to, $subject, $message, $headers ); //echo 'mail to ', $to, '<br/> ' , $subject, $message; // for testing } } add_action('comment_post', 'comment_mail_notify'); // 自动加勾选栏 function add_checkbox() { echo '<p><input type="checkbox" name="comment_mail_notify" id="comment_mail_notify" value="comment_mail_notify" checked="checked" style="margin:6px 4px;float:left;" /><label for="comment_mail_notify">有人回复时邮件通知我</label></p>'; } add_action('comment_form', 'add_checkbox'); //回复END-------------------------------------------------------- //后台登陆数学验证码 http://www.tennfy.com/1794.html function myplugin_add_login_fields() { //获取两个随机数, 范围0~9 $num1=rand(0,9); $num2=rand(0,9); //最终网页中的具体内容 echo "<p><label for='math' class='small'>验证码<br /> $num1 + $num2 = ? <input type='text' name='sum' class='input' value='' size='25'>" ."<input type='hidden' name='num1' value='$num1'>" ."<input type='hidden' name='num2' value='$num2'></label></p>"; } add_action('login_form','myplugin_add_login_fields'); function login_val() { if($_SERVER['REQUEST_METHOD'] == "POST"){ $sum=$_POST['sum']; switch($sum){ case $_POST['num1']+$_POST['num2']:break; case null:wp_die('错误: 请输入验证码.');break; default:wp_die('错误: 验证码错误,请重试.'); } } } add_action('login_form_login','login_val'); //end----------------------------------------------------------- //wp-login.php添加参数 add_action('login_enqueue_scripts','login_protection'); function login_protection(){ if($_SERVER['REQUEST_METHOD']=='POST'){ if ( $_POST['sum'] == $_POST['num1'] + $_POST['num2']) return; } if($_GET['abc'] == '123')//必须加?abc=123才能打开登录页面。//当然得换个不好猜测的 return; header('Location: https://youthlin.com/'); } //end----------------------------------------------- //添加后台快捷键提交评论 add_action('admin_footer', 'Bing_admin_comment_ctrlenter'); function Bing_admin_comment_ctrlenter(){ echo '<script type="text/javascript"> jQuery(document).ready(function($){ $("textarea").keypress(function(e){ if(e.ctrlKey&&e.which==13||e.which==10){ $("#replybtn").click(); } }); });</script>'; }; //end---------------------------------------------------- //标签云 边栏http://www.biantime.com/bian/caise-biaoqian --彼岸时光网 function colorCloud($text) {$text = preg_replace_callback('|<a (.+?)>|i','colorCloudCallback', $text);return $text;} function colorCloudCallback($matches) { $text = $matches[1]; $color = dechex(rand(0,16777215));//可选的颜色 $pattern = '/style=(\'|\”)(.*)(\'|\”)/i'; $text = preg_replace($pattern, "style=\"color:#{$color};$2;\"", $text); return "<a $text>";} add_filter('wp_tag_cloud', 'colorCloud', 1); //end----------------------------------------------------- //垃圾评论拦截 http://www.bgbk.org/wp-code-comment-spam.html class anti_spam { function anti_spam() { if ( !current_user_can('level_0') ) { add_action('template_redirect', array($this, 'w_tb'), 1); add_action('init', array($this, 'gate'), 1); add_action('preprocess_comment', array($this, 'sink'), 1); } } function w_tb() { if ( is_singular() ) { ob_start(create_function('$input','return preg_replace("#textarea(.*?)name=([\"\'])comment([\"\'])(.+)/textarea>#", "textarea$1name=$2w$3$4/textarea><textarea name=\"comment\" cols=\"100%\" rows=\"4\" style=\"display:none\"></textarea>",$input);') ); } } function gate() { if ( !empty($_POST['w']) && empty($_POST['comment']) ) { $_POST['comment'] = $_POST['w']; } else { $request = $_SERVER['REQUEST_URI']; $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '隐瞒'; $IP = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] . ' (透过代理)' : $_SERVER["REMOTE_ADDR"]; $way = isset($_POST['w']) ? '手动操作' : '未经评论表格'; $spamcom = isset($_POST['comment']) ? $_POST['comment'] : null; $_POST['spam_confirmed'] = "请求: ". $request. "\n来路: ". $referer. "\nIP: ". $IP. "\n方式: ". $way. "\n內容: ". $spamcom. "\n -- 记录成功 --"; } } function sink( $comment ) { if ( !empty($_POST['spam_confirmed']) ) { if ( in_array( $comment['comment_type'], array('pingback', 'trackback') ) ) return $comment; //方法一: 直接挡掉, 將 die(); 前面两斜线刪除即可. die(); //方法二: 标记为 spam, 留在资料库检查是否误判. //add_filter('pre_comment_approved', create_function('', 'return "spam";')); //$comment['comment_content'] = "[ 小墙判断这是 Spam! ]\n". $_POST['spam_confirmed']; } return $comment; } } $anti_spam = new anti_spam(); //end---------------------------------貌似并没有什么用(-。-;)-------------------------- //屏蔽纯英文留言 function scp_comment_post( $incoming_comment ) { $pattern = '/[一-龥]/u'; if(!preg_match($pattern, $incoming_comment['comment_content'])) { wp_die( "You should type some Chinese word (like 你好) in your comment to pass the spam-check, thanks for your patience! 请使用中文留言!" ); } return( $incoming_comment ); } add_filter('preprocess_comment', 'scp_comment_post'); //end--------------------------------------------------------- // 替换 WordPress 默认 Emoji 资源地址 function c7sky_change_wp_emoji_baseurl($url){ return set_url_scheme('//twemoji.maxcdn.com/72x72/'); } add_filter('emoji_url', 'c7sky_change_wp_emoji_baseurl'); //end----------------http://c7sky.com/change-the-wordpress-emoji-cdn.html-------- //系统表情指向主题表情(修改表情代码_代码1/3) add_filter('smilies_src','custom_smilies_src',1,20); function custom_smilies_src ($img_src, $img, $siteurl){ return get_bloginfo('template_directory').'/../2014/images/smilies/'.$img; } //表情代码转换图片(修改表情代码_代码2/3) if ( !isset( $wpsmiliestrans ) ) { $wpsmiliestrans = array( '[/疑问]' => 'icon_question.gif', '[/调皮]' => 'icon_razz.gif', '[/难过]' => 'icon_sad.gif', '[/愤怒]' => 'icon_smile.gif', '[/可爱]' => 'icon_redface.gif', '[/坏笑]' => 'icon_biggrin.gif', '[/惊讶]' => 'icon_surprised.gif', '[/发呆]' => 'icon_eek.gif', '[/撇嘴]' => 'icon_confused.gif', '[/大兵]' => 'icon_cool.gif', '[/偷笑]' => 'icon_lol.gif', '[/得意]' => 'icon_mad.gif', '[/白眼]' => 'icon_rolleyes.gif', '[/鼓掌]' => 'icon_wink.gif', '[/亲亲]' => 'icon_neutral.gif', '[/流泪]' => 'icon_cry.gif', '[/流汗]' => 'icon_arrow.gif', '[/吓到]' => 'icon_exclaim.gif', '[/抠鼻]' => 'icon_evil.gif', '[/呲牙]' => 'icon_mrgreen.gif', ':?:' => 'icon_question.gif', ':razz:' => 'icon_razz.gif', ':sad:' => 'icon_sad.gif', ':evil:' => 'icon_smile.gif', ':!:' => 'icon_redface.gif', ':smile:' => 'icon_biggrin.gif', ':oops:' => 'icon_surprised.gif', ':grin:' => 'icon_eek.gif', ':eek:' => 'icon_confused.gif', ':shock:' => 'icon_cool.gif', ':???:' => 'icon_lol.gif', ':cool:' => 'icon_mad.gif', ':lol:' => 'icon_rolleyes.gif', ':mad:' => 'icon_wink.gif', ':twisted:' => 'icon_neutral.gif', ':roll:' => 'icon_cry.gif', ':wink:' => 'icon_arrow.gif', ':idea:' => 'icon_exclaim.gif', ':arrow:' => 'icon_evil.gif', ':neutral:' => 'icon_mrgreen.gif', ':cry:' => 'icon_eek.gif', ':mrgreen:' => 'icon_razz.gif', ); } //3/3在comment.php //end-------------------------------------- //wordpress版权信息代码 function add_copyright($content) { if(is_single() or is_feed()) { $content.= "<hr />"; $content.= '<div class="copyright" style="border: 1px solid;font-size: smaller;background-color: beige;border-radius: 9px"> <div style="border-left-color: green;border-left-style: solid;border-left-width: 5px;margin: 1%;"> <h5 style="margin:0;"><small>声明</small></h5><ul style="margin-bottom:0"> <li class="copyright-li">本作品采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。除非注明,<a href="https://youthlin.com" target="_blank"><strong>霖博客</strong></a>文章均为原创。</li> <li class="copyright-li">转载请保留本文(<a name="theTitle">《'.get_the_title().'》</a>)链接地址 : <u name="shortLink">'.wp_get_shortlink(get_the_ID()).'</u></li> <li class="copyright-li">订阅本站:<a title="霖博客的RSS源" href="https://youthlin.com/feed/" rel="nofollow">https://youthlin.com/feed/</a></li></ul></div></div><!--.copyright-->'; } return $content; } add_filter ('the_content', 'add_copyright'); //end---------------------------------------------------------- //fancybox 图片暗箱 header里需要引用CSS/JS add_filter('the_content', 'fancybox'); function fancybox ($content){ global $post; $pattern = "/<a(.*?)href=('|\")([^>]*).(bmp|gif|jpeg|jpg|png|swf)('|\")(.*?)>(.*?)<\/a>/i"; $replacement = '<a$1href=$2$3.$4$5 rel="box" class="fancybox"$6>$7</a>'; $content = preg_replace($pattern, $replacement, $content); return $content; } //end------------------------------------------- //近期评论 https://youthlin.com/?p=610 class My_Widget_Recent_Comments extends WP_Widget { //新版Wordpress不能继承于WP_Widget_Recent_Comments了,后台不显示 public function __construct() { $widget_ops = array('classname' => 'my_widget_recent_comments', 'description' => __('显示最新评论内容')); parent::__construct('my-recent-comments', __('近期评论(带头像)'), $widget_ops); } function widget( $args, $instance ) { global $comments, $comment; $cache = wp_cache_get('widget_recent_comments', 'widget'); if ( ! is_array( $cache ) ) $cache = array(); if ( ! isset( $args['widget_id'] ) ) $args['widget_id'] = $this->id; if ( isset( $cache[ $args['widget_id'] ] ) ) { echo $cache[ $args['widget_id'] ]; return; } extract($args, EXTR_SKIP); $output = ''; $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( 'Recent Comments' ); $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); $number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5; if ( ! $number ) $number = 5; //////////////////// 2 这里 ///////////////////////// $comments = get_comments( apply_filters( 'widget_comments_args', array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish' , 'user_id' => 0) ) ); $output .= $before_widget; if ( $title ) $output .= $before_title . $title . $after_title; $output .= '<style>.recmtfleft{float:left;margin-right:4px;}.recmtauthor{font-weight:900;}span.recntfright {display: block;min-height: 53px;}.recentcomments{clear:both;padding:2px 1px;border-bottom: 1px dotted gray;}.recmtfleft .avatar{border-radius: 8px; -webkit-border-radius: 8px; -moz-border-radius:8px;}</style><ul id="recentcomments">'; if ( $comments ) { // Prime cache for associated posts. (Prime post term cache if we need it for permalinks.) $post_ids = array_unique( wp_list_pluck( $comments, 'comment_post_ID' ) ); _prime_post_caches( $post_ids, strpos( get_option( 'permalink_structure' ), '%category%' ), false ); foreach ( (array) $comments as $comment) { //////////////////// 1 这里 ///////////////////////// $avatar = '<span class="recmtfleft">'.get_avatar($comment,53,'','头像').'</span>'; $output .= '<li class="recentcomments">' . /* translators: comments widget: 1: comment author, 2: post link */ sprintf(_x('%1$s : %2$s', 'widgets'), $avatar .'<span class="recntfright"><span class="recmtauthor fn">'. get_comment_author_link().'</span>', '<a href="'. esc_url( get_comment_link($comment->comment_ID) ) . '" title="《'.get_the_title($comment->comment_post_ID).'》,于'.get_comment_date('Y-m-j') . '">' . mb_strimwidth(strip_tags($comment->comment_content),0,64, '[...]') . '</a>') . '</span></li>'; } } /*http://www.typemylife.com/wordpress-recent-comments-remove-author-name-display-content/ 修改步骤一: 把(_x('%1$s on %2$s', 'widgets')里面的这个单词“on”改成冒号“:”。 修改步骤二: 把get_the_title($comment->comment_post_ID)改为mb_strimwidth(strip_tags($comment->comment_content),0,50, 。。。》)。 这里的数字“50”是用来限制评论显示的字数,可以自行修改,至于后边那个小尾巴"。。。》"则是用来在实际评论字数少于允许显示的字数时补充空白处的,也可以依自己喜欢的格式修改之。(_注:。。。》要用单引号括起来) 以上修改完成后,最新评论的格式就变为:“读者ID”+":"+“实际评论内容”。 2)让最新评论不显示作者自己的评论 修改对象依然是上面提到的default-widgets.php文件。 搜索到以下代码片段: $comments = get_comments( apply_filters( 'widget_comments_args', array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish' ) ) ); 修改为以下格式: $comments = get_comments( apply_filters( 'widget_comments_args', array( 'number' => $number, 'status' => 'approve', 'post_status' => 'publish', 'type' => 'comment', 'user_id' => 0 ) ) ); 解释一下:'user_id' => 0效果为不显示站长自己的回复,'type' => 'comment'效果为只显示评论类留言,即,不显示pingback和trackback类留言。 */ $output .= '</ul>'; $output .= $after_widget; echo $output; $cache[$args['widget_id']] = $output; wp_cache_set('widget_recent_comments', $cache, 'widget'); } public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = sanitize_text_field( $new_instance['title'] ); $instance['number'] = absint( $new_instance['number'] ); return $instance; } public function form( $instance ) { $title = isset( $instance['title'] ) ? $instance['title'] : ''; $number = isset( $instance['number'] ) ? absint( $instance['number'] ) : 5; ?> <p><label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label> <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" /></p> <p><label for="<?php echo $this->get_field_id( 'number' ); ?>"><?php _e( 'Number of comments to show:' ); ?></label> <input class="tiny-text" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" type="number" step="1" min="1" value="<?php echo $number; ?>" size="3" /></p> <?php } public function flush_widget_cache() { _deprecated_function( __METHOD__, '4.4' ); } } register_widget('My_Widget_Recent_Comments'); //end-------------------------------------------------------------------------- //说说 /** http://nichen.info/add-mood-widget/ * WP添加侧边栏“心情随笔” * * http://www.nuodou.com/a/856.html * WordPress自定义侧边栏小工具 * 2012年06月07日 Mr.诺豆 * * 小工具接口 * http://codex.wordpress.org/zh-cn:%E5%B0%8F%E5%B7%A5%E5%85%B7%E6%8E%A5%E5%8F%A3/ */ class Saying_Comments extends WP_Widget{ public function __construct(){ $widget_ops = array('classname'=>'widget_saying','description'=>_('一个类似QQ空间“说说”的小工具。')); parent::__construct(false,_('说说'),$widget_ops); } function form($instance){ //title:标题 pageid:页面ID listnum:显示数量 charnum:截取字长 $instance = wp_parse_args((array)$instance,array('title'=>'说说','pageid'=>0,'listnum'=>8,'charnum'=>54));//默认值 $title = htmlspecialchars($instance['title']); $pageid = htmlspecialchars($instance['pageid']); $listnum = htmlspecialchars($instance['listnum']); $charnum = htmlspecialchars($instance['charnum']); echo '<p style="text-align:left;"><label for="'.$this->get_field_name('title') .'">标题:<input style="width:200px;" id="'.$this->get_field_id('title').'" name="'.$this->get_field_name('title') .'" type="text" value="'.$title.'" /></label></p>'; echo '<p style="text-align:left;"><label for="'.$this->get_field_name('pageid') .'">页面ID:<input style="width:200px;" id="'.$this->get_field_id('pageid') .'" name="'.$this->get_field_name('pageid').'" type="text" value="'.$pageid.'" /></label></p>'; echo '<p style="text-align:left;"><label for="'.$this->get_field_name('listnum') .'">显示条数:<input style="width:200px;" id="'.$this->get_field_id('listnum').'" name="' .$this->get_field_name('listnum').'" type="text" value="'.$listnum.'" /></label></p>'; echo '<p style="text-align:left;"><label for="'.$this->get_field_name('charnum') .'">截取字长:<input style="width:200px" id="'.$this->get_field_id('charnum').'" name="' .$this->get_field_name('charnum').'" type="text" value="'.$charnum.'" /></label></p>'; } function update($new_instance, $old_instance) { $instance = $old_instance; $instance['title'] = strip_tags(stripslashes($new_instance['title'])); $instance['pageid'] = $new_instance['pageid']; $instance['listnum'] = strip_tags(stripslashes($new_instance['listnum'])); $instance['charnum'] = strip_tags(stripslashes($new_instance['charnum'])); return $instance; } //$args是注册侧边栏的注册的几个变量 //$instance是小工具的设置数据 function widget($args,$instance){ // http://nichen.info/add-mood-widget/ // @see WP_Widget_Recent_Comments global $comments, $comment; extract($args); //将数组展开 $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : __( '说说' ); $title = apply_filters( 'widget_title', $title, $instance, $this->id_base ); //$title = apply_filters('widget_title', empty($instance['title']) ? __('说说') : $instance['title']); $pageid = empty($instance['pagedid']) ? $instance['pageid'] : 0; $listnum = empty($instance['listnum']) ? 5 : $instance['listnum']; $charnum = empty($instance['charnum']) ? 140 : $instance['charnum']; $avatar = get_avatar(1,60,'','头像'); // http://codex.wordpress.org/Function_Reference/get_avatar $argument = array( 'number' => $listnum, 'post_id' => $pageid, 'user_id' => '1', 'parent' => '0' ); $wbfollow='<wb:follow-button uid="3191703225" type="red_1" width="67" height="24" style="position:absolute;margin-top:16px;margin-left:10px;"></wb:follow-button>'; //微博关注按钮 $gplus='<!-- 将此代码放置在你希望显示徽章的位置。 --> <a href="//plus.google.com/u/0/111325266765620895423?prsrc=3" rel="publisher" target="_blank" style="text-decoration:none;position: absolute;margin-top: 14px;margin-left: 80px;"> <img src="//ssl.gstatic.com/images/icons/gplus-16.png" alt="Google+" style="border:0;width:20px;height:20px;"/> </a>'; // http://codex.wordpress.org/zh-cn:函数参考/get_comments $comments = get_comments($argument); $output = ''; $output .= $before_widget; if ( $title ){ $title = $avatar.'<a href="'.get_permalink($pageid) .'">' . $title . '</a>' . $wbfollow . $gplus; $output .= $before_title . $title . $after_title; } //echo $pageid;//输出页面ID调试以查看pageid是否正确 $output .= '<ul id="saying">'; if ( $comments){ foreach ( (array) $comments as $comment){ $output .= '<li class="saying">' . '<span><a href="'.esc_url( get_comment_link($comment->comment_ID) ).'">' . convert_smilies(mb_strimwidth(strip_tags($comment->comment_content),0,$charnum,'[...]')) // http://blog.wpjam.com/function_reference/convert_smilies/ . '</a></span><br />' . '<span>'.get_comment_date('m月d日H:i ',$comment->comment_ID) . '</span></li>'; } } $output .= '</ul>'; $output .= $after_widget; echo $output; } } add_action('widgets_init', create_function('', 'return register_widget("Saying_Comments");')); //end--------------------------------------------------- //随机文章 /** * Random_Posts widget class * * Author: haoxian_zeng <http://cnzhx.net/> * Date: 2013.05.14, cnzhx2011 1.0 */ class WP_Widget_myRandom_Posts extends WP_Widget { function __construct() { $widget_ops = array('classname' => 'widget_my_random_posts', 'description' => __( '水景一页定制的随机文章微件。The cnzhx customized random posts widget.' ) ); parent::__construct('random-posts', __('随机文章 Random Posts'), $widget_ops); $this->alt_option_name = 'widget_my_random_posts'; } function widget( $args, $instance ) { global $randomposts, $post; extract($args, EXTR_SKIP); $output = ''; // 设置 widget 标题 $title = apply_filters('widget_title', empty($instance['title']) ? __('随机文章 Random Posts') : $instance['title']); // 设置要获取的文章数目 if ( ! $number = absint( $instance['number'] ) ) $number = 5; // WP 数据库查询,使用 rand 参数来获取随机的排序,并取用前面的 $number 个文章 $randomposts = get_posts( array( 'number' => $number, 'orderby' => 'rand', 'post_status' => 'publish' ) ); // 下面开始准备输出数据 // 先输出一般的 widget 前缀 $output .= $before_widget; // 输出标题 if ( $title ) $output .= $before_title . $title . $after_title; // random posts 列表开始 $output .= '<ul id="randomposts">'; if ( $randomposts ) { foreach ( (array) $randomposts as $post) { $output .= '<li><a href="' . get_permalink() . '">' . $post->post_title . '</a></li>'; } } $output .= '</ul>'; // 输出一般的 widget 后缀 $output .= $after_widget; // 输出到页面 echo $output; } function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = strip_tags($new_instance['title']); $instance['number'] = absint( $new_instance['number'] ); $alloptions = wp_cache_get( 'alloptions', 'options' ); if ( isset($alloptions['widget_my_random_posts']) ) delete_option('widget_my_random_posts'); return $instance; } // 在 WP 后台的 widget 内部显示两个参数, 1. 标题;2. 显示文章数目 function form( $instance ) { $title = isset($instance['title']) ? esc_attr($instance['title']) : ''; $number = isset($instance['number']) ? absint($instance['number']) : 5; ?> <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> <input class="cnzhx" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" /></p> <p><label for="<?php echo $this->get_field_id('number'); ?>"><?php _e('Number of posts to show:'); ?></label> <input id="<?php echo $this->get_field_id('number'); ?>" name="<?php echo $this->get_field_name('number'); ?>" type="text" value="<?php echo $number; ?>" size="3" /></p> <?php } } // register WP_Widget_myRandom_Posts widget add_action( 'widgets_init', create_function( '', 'register_widget("WP_Widget_myRandom_Posts");' ) ); //end------------------------------------------------- ///http://www.freehao123.com/wordpress-gravatar/#toc-4 ////缓存头像 function mytheme_get_avatar($avatar) { //gravatar.duoshuo.com//并不能用反而cn.gravatar.com好使 $avatar = str_replace(array("www.gravatar.com","0.gravatar.com","1.gravatar.com","2.gravatar.com"),"cn.gravatar.com",$avatar); return $avatar; } add_filter( 'get_avatar', 'mytheme_get_avatar', 10, 3 ); //end------------------------------------------- //页面首部header添加自定义代码 function add_header(){ $keywords=""; $description=""; global $post; //如果是首页 if (is_home()){ $keywords = "霖博客,wordpress,Youth.霖"; $description = "Youth.霖的博客。"; } //如果是文章页 elseif (is_single()){ //默认使用文章页添加关键字 $keywords = get_post_meta($post->ID, "keywords", true); //如果为空,使用标签作为关键字 if($keywords == ""){ $tags = wp_get_post_tags($post->ID); foreach ($tags as $tag){ $keywords = $keywords.$tag->name.","; } //去掉最后一个, $keywords = rtrim($keywords, ', '); } //默认使用文章页添加描述 $description = get_post_meta($post->ID, "description", true); } //如果是页面,使用页面添加的关键字和描述 elseif (is_page()){ $keywords = get_post_meta($post->ID, "keywords", true); $description = get_post_meta($post->ID, "description", true); } //如果是分类页,使用分类名作为关键字,分类描述作为描述 elseif (is_category()){ $keywords = single_cat_title('', false); $description = category_description(); } //如果是标签页,使用标签名作为关键字,标签描述作为描述 elseif (is_tag()){ $keywords = single_tag_title('', false); $description = tag_description(); } if (!is_404()) { //标签为空则用标题 if ($keywords == "") { $keywords = get_the_title($post->ID); } //描述为空则用前100个字 if($description == ""){ if($post->post_excerpt){ $description = $post->post_excerpt; }else{ $description = mb_strimwidth(strip_tags(apply_filters('the_content',$post->post_content)),0,200); } } } $keywords = trim(strip_tags($keywords)); $description = trim(strip_tags($description)); echo "<meta name=\"keywords\" content=\"$keywords\" />\n" ."<meta name=\"description\" content=\"$description\"/>\n"; if( is_single() || is_page() ) { if( function_exists('get_query_var') ) { $cpage = intval(get_query_var('cpage')); $commentPage = intval(get_query_var('comment-page')); } if( !empty($cpage) || !empty($commentPage) ) { echo '<meta name="robots" content="noindex, nofollow" />'; echo "\n"; } } echo '<script type="text/javascript" src="'.get_bloginfo('template_directory').'/../2014/fancybox/fancybox.js"></script>' ."\n<script type='text/javascript'>jQuery(document).ready(function() {jQuery('.fancybox').fancybox();});</script>" ."\n<link rel='stylesheet' type='text/css' href='". get_bloginfo('template_directory')."/../2014/fancybox/fancybox.css' />"; if ( is_singular() ){ echo "\n<script type=\"text/javascript\" src=\"".get_bloginfo('template_directory')."/../2014/comments-ajax.js\"></script>\n"; } ?> <script type="text/javascript"> //评论分页ajax jQuery(document).ready(function($) { $body = (window.opera) ? (document.compatMode == "CSS1Compat" ? $('html') : $('body')) : $('html,body'); $(document).on('click', '.comments-navi a', function(e) { e.preventDefault(); $.ajax({ type: "GET", url: $(this).attr('href'), beforeSend: function() { $('.comments-navi').remove(); $('.comment-list').remove(); $('#loading-comments').slideDown(); $body.animate({scrollTop: $('#comments').offset().top - 65}, 800 ); //http://www.w3school.com.cn/jquery/css_offset.asp/////////http://kayosite.com/ajax-turn-page-for-wordpress-comments-list.html#comment-8925 },//beforeSend dataType: "html", success: function(out) { result = $(out).find('.comment-list'); abovenav = $(out).find('#comment-nav-above'); belownav = $(out).find('#comment-nav-below'); $('#loading-comments').slideUp(550); $('#loading-comments').after(result.fadeIn(800)); result.before(abovenav); result.after(belownav); $('.fn a').click (function() {$(this).attr('target','_blank');}); }//success });//$.ajax });//function(e) //2014主题固定侧栏: $(window).scroll(function(){ if ($('body').hasClass('masthead-fixed') && $('html').width() > 990) { $('#secondary').css('position','fixed'); $('#secondary').css('margin-left',0); $('#secondary').css('top','50px'); $('#secondary').css('padding','10px'); $('#secondary').css('width','160px'); if ($('html').width()>1260) {$('#masthead').css('width','99%');} }else{ $('#secondary').removeAttr('style');$('#masthead').css('width','100%'); } }); });//ready </script> <?php } add_action('wp_head','add_header'); //end header------------------------------------------------- //复制文字添加链接 http://www.dreamfy.com/notes/wordpress/767.html function add_footer() { ?> <style type="text/css">#colophon>.site-info{display: none;border-top: none;}.gotoTop:hover{background-color: green;} .my-site-footer>.site-info {border-top: 1px solid rgba(255, 255, 255, 0.2);}</style> <div class="site-footer my-site-footer"><div class="site-info"> <div class="gotoTop"><a style="display:block;padding: 1%;margin: auto;text-align: center;font-size: larger;font-weight: bold;" href="javascript:scroll(0,0)">返回顶部</a></div> ©2011-<?php echo date('Y'); ?> <span class="copyAuthor" > <a href="https://youthlin.com/" target="_blank">霖博客</a></span> 自豪地采用 <a href="http://wordpress.org/" target="_blank">WordPress</a> , <a href="https://my.laoxuehost.net/aff.php?aff=2315" target="_blank" rel="nofallow">老薛主机</a>. <a href="https://youthlin.com/sitemap.xml" target="_blank">站点地图</a>.</div></div> <script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> jQuery(document).ready(function($){ //Ctrl+Enter回复 jQuery(document).keypress(function(e){ if(e.ctrlKey && e.which == 13 || e.which == 10) { jQuery("#submit").click(); } }) var msgctrl = '提示:按Ctrl+Enter快速提交'; jQuery(".form-submit").before(msgctrl); $('.fn a').click (function() {$(this).attr('target','_blank');}); }); (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-46211856-2', 'auto'); ga('send', 'pageview'); </script> <script type='text/javascript'> function addLink() { var body_element = document.getElementsByTagName('body')[0]; var selection; selection = window.getSelection(); var pagelink = "<br /><br />//来源: <a href='"+document.location.href+"'>"+document.location.href+"</a>"; var copy_text = selection + pagelink; var new_div = document.createElement('div'); new_div.style.left='-99999px'; new_div.style.position='absolute'; body_element.appendChild(new_div ); new_div.innerHTML = copy_text ; selection.selectAllChildren(new_div ); window.setTimeout(function() { body_element.removeChild(new_div ); },0); } document.oncopy = addLink; </script> <div id="shangxia" style="position:fixed;"> <div id="shang"></div> <?php if (is_single()||is_page() ) { ?><div id="comt"></div><?php } ?> <div id="xia"></div> </div> <script type="text/javascript"> jQuery(document).ready(function($){ $('#shang').click(function(){$('html,body').animate({scrollTop: '0px'}, 1000);$(this).mouseout();}); $('#comt').click(function(){$('html,body').animate({scrollTop:$('#comments').offset().top-45}, 1300);}); $('#xia').click(function(){$('html,body').animate({scrollTop:$('#colophon').offset().top},1000); $(this).mouseout();}); /* 咸菜一点米追加的代码段开始 */ //来源: https://youthlin.com/20151025.html var xcy_me = 0 ; $('#shang').hover( function(){if(!xcy_me){xcy_me = setInterval(function() {$(document).scrollTop($(document).scrollTop() - 4 );},44);}}, function(){if(xcy_me) {clearInterval(xcy_me);xcy_me = 0;}} );/* 咸菜一点米追加的代码段结束 */ // http://gnqc.jx.cn var flag = 0; $('#xia').hover( function(){if(!flag){flag = setInterval(function(){$(document).scrollTop($(document).scrollTop() + 4 );},44);}}, function(){clearInterval(flag);flag = 0;} );// http://gnqc.jx.cn }); </script> <!-- 将此标记放置在你希望显示+1 按钮的位置。 --> <!--div class="g-plusone" data-annotation="none"></div--> <!-- 将此标记放置在最后一个 +1 按钮 标记之后。 --> <script type="text/javascript"> window.___gcfg = {lang: 'zh-CN'}; (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/platform.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })(); </script> <div class="youthlin" style="display:none;"> <!--腾讯分析20140224--> <script type="text/javascript" src="http://tajs.qq.com/stats?sId=30683215" charset="UTF-8"></script> </div> <!--span class="query"><?php echo get_num_queries(); ?> queries in <?php timer_stop(1); ?> seconds.</span--> <?php }//add_footer add_action( 'wp_footer', 'add_footer'); //end add_footer ------------------------------------------------------
其中:
- 替换字体,原主题是使用
twentyfourteen_font_url
函数加载字体的,子主题不能重新定义这个函数,因此新顶一个函数,然后使用过滤器add_filter('twentyfourteen_font_url','my_font_url');
替换原函数。 - 评论通知需要
comments-ajax.php
,comments-ajax.js
配合使用,还需要修改一下父主题的comments.php
模板,添加自定义表情也要改一下评论模板。
下面是comments.php
的内容:
<?php /** * The template for displaying Comments * * The area of the page that contains comments and the comment form. * * @package WordPress * @subpackage Twenty_Fourteen * @since Twenty Fourteen 1.0 */ //ini_set('display_errors', false);///////////////////////////////////// /* * If the current post is protected by a password and the visitor has not yet * entered the password we will return early without loading the comments. */ if ( post_password_required() ) { return; } ?> <div id="comments" class="comments-area"> <?php if ( have_comments() ) : ?> <h2 class="comments-title"> <?php printf( _n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'twentyfourteen' ), number_format_i18n( get_comments_number() ), get_the_title() ); ?> </h2> <?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : ?> <style> #loading-comments {display: none; width: 100%; height: 45px; background: #a0d536; text-align: center; color: #fff; font-size: 22px; line-height: 45px; </style> <div id="loading-comments"> <img src="<?php echo get_template_directory_uri(); ?>/../2014/images/loading.gif" alt="" /> Loading</div> <nav id="comment-nav-above" class="comments-navi navigation comment-navigation paging-navigation " role="navigation"> <h1 class="screen-reader-text"><?php _e( 'Comment navigation', 'twentyfourteen' ); ?></h1> <?php paginate_comments_links('prev_text=«&next_text=»');?> </nav><!-- #comment-nav-above --> <?php endif; // Check for comment navigation. ?> <ol class="comment-list"> <?php wp_list_comments( array( 'style' => 'ol', 'short_ping' => true, 'avatar_size'=> 34, ) ); ?> </ol><!-- .comment-list --> <?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : ?> <nav id="comment-nav-below" class="comments-navi navigation comment-navigation paging-navigation " role="navigation"> <h1 class="screen-reader-text"><?php _e( 'Comment navigation', 'twentyfourteen' ); ?></h1> <?php paginate_comments_links('prev_text=«&next_text=»');?> </nav><!-- #comment-nav-below --> <?php endif; // Check for comment navigation. ?> <?php if ( ! comments_open() ) : ?> <p class="no-comments"><?php _e( 'Comments are closed.', 'twentyfourteen' ); ?></p> <?php endif; ?> <?php endif; // have_comments() ?> <?php /*改文字http://www.90nl.com/archives/wordpress-tencent-phiz.html *comment_form() 加表情 http://zww.me/archives/25313 *onkeydown="if(event.ctrlKey){if(event.keyCode==13){document.getElementById(\'submit\').click();return false}};" */ include(TEMPLATEPATH . '/../2014/includes/smiley.php'); //记得改路径 comment_form('comment_field=<p class="comment-form-comment"><p>'.$smilies.'</p><textarea aria-required="true" rows="8" cols="45" name="comment" id="comment"></textarea></p>'); ?> </div><!-- #comments -->
comments-ajax.js, comments-ajax.php内容:点击右边箭头在新窗口打开
注意代码中的路径发生了变化
/** * WordPress jQuery-Ajax-Comments v1.3 by Willin Kan. * URI: http://kan.willin.org/?p=1271 */ var i = 0, got = -1, len = document.getElementsByTagName('script').length; while ( i <= len && got == -1){ var js_url = document.getElementsByTagName('script')[i].src, got = js_url.indexOf('comments-ajax.js'); i++ ; } /*添加下面一句代码:*/ js_url = js_url.replace('youthlin.qiniudn.com','youthlin.com'); /*七牛云存储,无法评 http://louxi.me/network/wp/1788.html | 小楼昨夜又东风*/ var edit_mode = '1', // 再編輯模式 ( '1'=開; '0'=不開 ) ajax_php_url = js_url.replace('-ajax.js','-ajax.php'), wp_url = js_url.substr(0, js_url.indexOf('wp-content')), pic_sb = wp_url + 'wp-admin/images/wpspin_light.gif', // 提交 icon pic_no = wp_url + 'wp-admin/images/no.png', // 錯誤 icon pic_ys = wp_url + 'wp-admin/images/yes.png', // 成功 icon txt1 = '<div id="loading"><img src="' + pic_sb + '" style="vertical-align:middle;" alt=""/> 正在提交, 請稍候...</div>', txt2 = '<div id="error">#</div>', txt3 = '"><img src="' + pic_ys + '" style="vertical-align:middle;" alt=""/> 提交成功', edt1 = ', 刷新页面之前可以<a rel="nofollow" class="comment-reply-link" href="#edit" onclick=\'return addComment.moveForm("', edt2 = ')\'>再编辑</a>', cancel_edit = '取消编辑', edit, num = 1, comm_array=[]; comm_array.push(''); jQuery(document).ready(function($) { $comments = $('#comments-title'); // 評論數的 ID $cancel = $('#cancel-comment-reply-link'); cancel_text = $cancel.text(); $submit = $('#commentform #submit'); $submit.attr('disabled', false); $('#comment').after( txt1 + txt2 ); $('#loading').hide(); $('#error').hide(); $body = (window.opera) ? (document.compatMode == "CSS1Compat" ? $('html') : $('body')) : $('html,body'); /** submit */ $('#commentform').submit(function() { $('#loading').slideDown(); $submit.attr('disabled', true).fadeTo('slow', 0.5); if ( edit ) $('#comment').after('<input type="text" name="edit_id" id="edit_id" value="' + edit + '" style="display:none;" />'); /** Ajax */ $.ajax( { url: ajax_php_url, data: $(this).serialize(), type: $(this).attr('method'), error: function(request) { $('#loading').slideUp(); $('#error').slideDown().html('<img src="' + pic_no + '" style="vertical-align:middle;" alt=""/> ' + request.responseText); setTimeout(function() {$submit.attr('disabled', false).fadeTo('slow', 1); $('#error').slideUp();}, 3000); }, success: function(data) { $('#loading').hide(); comm_array.push($('#comment').val()); $('textarea').each(function() {this.value = ''}); var t = addComment, cancel = t.I('cancel-comment-reply-link'), temp = t.I('wp-temp-form-div'), respond = t.I(t.respondId), post = t.I('comment_post_ID').value, parent = t.I('comment_parent').value; // comments if ( ! edit && $comments.length ) { n = parseInt($comments.text().match(/\d+/)); $comments.text($comments.text().replace( n, n + 1 )); } // show comment new_htm = '" id="new_comm_' + num + '"></'; new_htm = ( parent == '0' ) ? ('\n<ol style="clear:both;" class="commentlist' + new_htm + 'ol>') : ('\n<ul class="children' + new_htm + 'ul>'); ok_htm = '\n<span id="success_' + num + txt3; if ( edit_mode == '1' ) { div_ = (document.body.innerHTML.indexOf('div-comment-') == -1) ? '' : ((document.body.innerHTML.indexOf('li-comment-') == -1) ? 'div-' : ''); ok_htm = ok_htm.concat(edt1, div_, 'comment-', parent, '", "', parent, '", "respond", "', post, '", ', num, edt2); } ok_htm += '</span><span></span>\n'; $('#respond').before(new_htm); $('#new_comm_' + num).hide().append(data); $('#new_comm_' + num + ' li').append(ok_htm); $('#new_comm_' + num).fadeIn(4000); $body.animate( { scrollTop: $('#new_comm_' + num).offset().top - 200}, 900); countdown(); num++ ; edit = ''; $('*').remove('#edit_id'); cancel.style.display = 'none'; cancel.onclick = null; t.I('comment_parent').value = '0'; if ( temp && respond ) { temp.parentNode.insertBefore(respond, temp); temp.parentNode.removeChild(temp) } } }); // end Ajax return false; }); // end submit /** comment-reply.dev.js */ addComment = { moveForm : function(commId, parentId, respondId, postId, num) { var t = this, div, comm = t.I(commId), respond = t.I(respondId), cancel = t.I('cancel-comment-reply-link'), parent = t.I('comment_parent'), post = t.I('comment_post_ID'); if ( edit ) exit_prev_edit(); num ? ( t.I('comment').value = comm_array[num], edit = t.I('new_comm_' + num).innerHTML.match(/(comment-)(\d+)/)[2], $new_sucs = $('#success_' + num ), $new_sucs.hide(), $new_comm = $('#new_comm_' + num ), $new_comm.hide(), $cancel.text(cancel_edit) ) : $cancel.text(cancel_text); t.respondId = respondId; postId = postId || false; if ( !t.I('wp-temp-form-div') ) { div = document.createElement('div'); div.id = 'wp-temp-form-div'; div.style.display = 'none'; respond.parentNode.insertBefore(div, respond) } !comm ? ( temp = t.I('wp-temp-form-div'), t.I('comment_parent').value = '0', temp.parentNode.insertBefore(respond, temp), temp.parentNode.removeChild(temp) ) : comm.parentNode.insertBefore(respond, comm.nextSibling); $body.animate( { scrollTop: $('#respond').offset().top - 180 }, 400); if ( post && postId ) post.value = postId; parent.value = parentId; cancel.style.display = ''; cancel.onclick = function() { if ( edit ) exit_prev_edit(); var t = addComment, temp = t.I('wp-temp-form-div'), respond = t.I(t.respondId); t.I('comment_parent').value = '0'; if ( temp && respond ) { temp.parentNode.insertBefore(respond, temp); temp.parentNode.removeChild(temp); } this.style.display = 'none'; this.onclick = null; return false; }; try { t.I('comment').focus(); } catch(e) {} return false; }, I : function(e) { return document.getElementById(e); } }; // end addComment function exit_prev_edit() { $new_comm.show(); $new_sucs.show(); $('textarea').each(function() {this.value = ''}); edit = ''; } var wait = 15, submit_val = $submit.val(); function countdown() { if ( wait > 0 ) { $submit.val(wait); wait--; setTimeout(countdown, 1000); } else { $submit.val(submit_val).attr('disabled', false).fadeTo('slow', 1); wait = 15; } } });// end jQ
<?php /** * WordPress 內置嵌套評論專用 Ajax comments >> WordPress-jQuery-Ajax-Comments v1.3 by Willin Kan. * * 說明: 這個文件是由 WP 3.0 根目錄的 wp-comment-post.php 修改的, 修改的地方有注解. 當 WP 升級, 請注意可能有所不同. */ if ( 'POST' != $_SERVER['REQUEST_METHOD'] ) { header('Allow: POST'); header('HTTP/1.1 405 Method Not Allowed'); header('Content-Type: text/plain'); exit; } /** Sets up the WordPress Environment. */ require( dirname(__FILE__) . '/../../../wp-load.php' ); // 此 comments-ajax.php 位於主題資料夾,所以位置已不同 nocache_headers(); $comment_post_ID = isset($_POST['comment_post_ID']) ? (int) $_POST['comment_post_ID'] : 0; $post = get_post($comment_post_ID); if ( empty($post->comment_status) ) { do_action('comment_id_not_found', $comment_post_ID); err(__('Invalid comment status.')); // 將 exit 改為錯誤提示 } // get_post_status() will get the parent status for attachments. $status = get_post_status($post); $status_obj = get_post_status_object($status); if ( !comments_open($comment_post_ID) ) { do_action('comment_closed', $comment_post_ID); err(__('Sorry, comments are closed for this item.')); // 將 wp_die 改為錯誤提示 } elseif ( 'trash' == $status ) { do_action('comment_on_trash', $comment_post_ID); err(__('Invalid comment status.')); // 將 exit 改為錯誤提示 } elseif ( !$status_obj->public && !$status_obj->private ) { do_action('comment_on_draft', $comment_post_ID); err(__('Invalid comment status.')); // 將 exit 改為錯誤提示 } elseif ( post_password_required($comment_post_ID) ) { do_action('comment_on_password_protected', $comment_post_ID); err(__('Password Protected')); // 將 exit 改為錯誤提示 } else { do_action('pre_comment_on_post', $comment_post_ID); } $comment_author = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null; $comment_author_email = ( isset($_POST['email']) ) ? trim($_POST['email']) : null; $comment_author_url = ( isset($_POST['url']) ) ? trim($_POST['url']) : null; $comment_content = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null; $edit_id = ( isset($_POST['edit_id']) ) ? $_POST['edit_id'] : null; // 提取 edit_id // If the user is logged in $user = wp_get_current_user(); //var_dump($user); if ( $user->ID ) { if ( empty( $user->display_name ) ) $user->display_name = $user->user_login; $comment_author = $user->display_name; $comment_author_email = $user->user_email; $comment_author_url = $user->user_url; if ( current_user_can('unfiltered_html') ) { if ( wp_create_nonce('unfiltered-html-comment_' . $comment_post_ID) != $_POST['_wp_unfiltered_html_comment'] ) { kses_remove_filters(); // start with a clean slate kses_init_filters(); // set up the filters } } } else { if ( get_option('comment_registration') || 'private' == $status ) err(__('Sorry, you must be logged in to post a comment.')); // 將 wp_die 改為錯誤提示 } $comment_type = ''; if ( get_option('require_name_email') && !$user->ID ) { if ( 6 > strlen($comment_author_email) || '' == $comment_author ) err( __('Error: please fill the required fields (name, email).') ); // 將 wp_die 改為錯誤提示 elseif ( !is_email($comment_author_email)) err( __('Error: please enter a valid email address.') ); // 將 wp_die 改為錯誤提示 } if ( '' == $comment_content ) err( __('Error: please type a comment.') ); // 將 wp_die 改為錯誤提示 // 增加: 敏感词过滤 By: Youth.霖 https://youthlin.com/ at:2016-03-13 $not_allowed_array = array('整形','电商','金融'); if (in_array($comment_content, $not_allowed_array)) { err(__("包含不受欢迎的词语,请修改")); } // 增加: 錯誤提示功能 function err($ErrMsg) { header('HTTP/1.1 405 Method Not Allowed'); echo $ErrMsg; exit; } // 增加: 檢查重覆評論功能 $dupe = "SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = '$comment_post_ID' AND ( comment_author = '$comment_author' "; if ( $comment_author_email ) $dupe .= "OR comment_author_email = '$comment_author_email' "; $dupe .= ") AND comment_content = '$comment_content' LIMIT 1"; if ( $wpdb->get_var($dupe) ) { err(__('Duplicate comment detected; it looks as though you’ve already said that!')); } // 增加: 檢查評論太快功能 if ( $lasttime = $wpdb->get_var( $wpdb->prepare("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_author = %s ORDER BY comment_date DESC LIMIT 1", $comment_author) ) ) { $time_lastcomment = mysql2date('U', $lasttime, false); $time_newcomment = mysql2date('U', current_time('mysql', 1), false); $flood_die = apply_filters('comment_flood_filter', false, $time_lastcomment, $time_newcomment); if ( $flood_die ) { err(__('You are posting comments too quickly. Slow down.')); } } $comment_parent = isset($_POST['comment_parent']) ? absint($_POST['comment_parent']) : 0; $commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID'); /////////////////////////////////////////////////////////////////////////////////// /** 普通评论者:邮箱正确、ip相符、时间在一小时之内方可更新 @code by 荒野无灯 */ /* function ihacklog_user_can_edit_comment($new_cmt_data,$comment_ID = 0) { if(current_user_can('edit_comment', $comment_ID)) { return true; } $comment = get_comment( $comment_ID ); $old_timestamp = strtotime( $comment->comment_date); $new_timestamp = current_time('timestamp'); // 不用get_comment_author_email($comment_ID) , get_comment_author_IP($comment_ID) $rs = $comment->comment_author_email === $new_cmt_data['comment_author_email'] && $comment->comment_author_IP === $_SERVER['REMOTE_ADDR'] && $new_timestamp - $old_timestamp < 3600; return $rs; } //增加至此///////////////////////////////////////////////////////////////////////////// */ // 增加: 檢查評論是否正被編輯, 更新或新建評論 if ( $edit_id ){ $comment_id = $commentdata['comment_ID'] = $edit_id; wp_update_comment( $commentdata ); } else { $comment_id = wp_new_comment( $commentdata ); } ///////////////////////////////////////////////////////////////////////////////////////////////// /* if ( $edit_id ) { $comment_id = $commentdata['comment_ID'] = $edit_id; if( ihacklog_user_can_edit_comment($commentdata,$comment_id) ) { wp_update_comment( $commentdata ); } else { err( 'Cheatin’ uh?' ); } } else { $comment_id = wp_new_comment( $commentdata ); } //////////////////////////////////////////////////////////////////////////////////////// */ $comment = get_comment($comment_id); if ( !$user->ID ) { $comment_cookie_lifetime = apply_filters('comment_cookie_lifetime', 30000000); setcookie('comment_author_' . COOKIEHASH, $comment->comment_author, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); setcookie('comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); setcookie('comment_author_url_' . COOKIEHASH, esc_url($comment->comment_author_url), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN); } //$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id; //取消原有的刷新重定向 //$location = apply_filters('comment_post_redirect', $location, $comment); //wp_redirect($location); $comment_depth = 1; //为评论的 class 属性准备的 $tmp_c = $comment; while($tmp_c->comment_parent != 0){ $comment_depth++; $tmp_c = get_comment($tmp_c->comment_parent); } //以下是評論式樣, 不含 "回覆". 要用你模板的式樣 copy 覆蓋. ?> <li <?php comment_class(); ?> id="li-comment-<?php comment_ID(); ?>"> <div id="comment-<?php comment_ID(); ?>"> <div class="comment-author vcard"> <?php echo get_avatar( $comment,$size='40',$default='<path_to_url>' ); ?> <?php printf( __( '<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link() ); ?> </div> <?php if ( $comment->comment_approved == '0' ) : ?> <em><?php _e( 'Your comment is awaiting moderation.' ); ?></em> <br /> <?php endif; ?> <div class="comment-meta commentmetadata"><a href="<?php echo esc_url( get_comment_link( $comment->comment_ID ) ); ?>"><?php printf( __( '%1$s at %2$s' ), get_comment_date(), get_comment_time() ); ?></a><?php edit_comment_link( __( '(Edit)' ), ' ' ); ?></div> <div class="comment-body"><?php comment_text(); ?></div> </div>
其他文件也可以自定义,都会覆盖父主题,所以一般都是把父主题的模板拷贝过来修改。比如上面的评论模板,还有我还改了个404模板。 用意是:贡献404,让迷失宝贝回家
感谢阅读。
声明
- 本作品采用署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。除非特别注明, 霖博客文章均为原创。
- 转载请保留本文(《以子主题方式自定义WordPress》)链接地址: https://youthlin.com/?p=1194
- 订阅本站:https://youthlin.com/feed/
“以子主题方式自定义WordPress”上的6条回复
我也是用的Twenty fourteen 改的子主题。
WP功能已经多到让我蛋疼,完全没心情自己改了……
子主题的方法不错,不惧主题升级。
不知道为什么评论到回收站里了……
感觉网站打开比以前慢了