PC丶爱好者 PC丶爱好者
个人博客搜索WP酷
关注数: 45 粉丝数: 165 发帖数: 3,348 关注贴吧数: 14
[众人拾柴] 清华大学出版社《WordPress 从入门到精通》征集作者   好久不见,甚是想念   出于偶然,我有幸能与优设小编共同编写 《WordPress 从入门到精通》一书;我们希望能为更多初入 WordPress 大门(da keng)的爱好者们提供一点点捷径——能有机会分享自己在折腾 WordPress 时摸爬滚打的经历着实是我莫大的荣幸。但实在令我不知所措的是:我虽然冠着吧主的头衔,知识面却远远不及在贴吧里的各位——当出版社为图书定死标题为「从入门到精通」时,我更加感到不安,生怕自己的错误理解和习惯通过文字传递给各位读者…   因此,自本帖发出时始:清华大学出版社《WordPress 从入门到精通》一书正式寻求共同作者加入。人数不限,只要您同样与我们拥有一腔热血,只要您也愿意为推动 WordPress 中文发展 尽一份力。 关于报酬   参与编写图书的每一位共同作者将在图书出版后收到样书,并定时按照书籍销量及所负责内容的百分比向各位作者支付稿酬。例如:「图书定价 100/元,共售出 1W 本」,报酬计算公式为:100*10000*4%*n%(n% 为作者撰写内容所占比重) 图书相关 - 书籍面向读者:平面设计师、WordPress 初学者、电商 - 预计难度:参见《Head First WordPress》,目录待定 - 特点:附赠主题、图书服务社区、付费问答等 - 协作方式:石墨文档,Teambition 有意请联系:pc#edu.ax(国际惯例 # 换成 @,抱歉不回私信)
推荐 Smoothieware 的 626Pilot 固件 - 带 Delta 类自校正功能   本屌最近入了 MKS SBASE,听说他兼容 Smoothieware 就马上给他换上了 SeemeCNC 的大神固件=w=。有多大神捏,貌似和 http://tieba.baidu.com/p/3469922721 原理差不多……(从来没用 RichCattell 校正成功过)适合懒人使用,大神表打我~~~~~   可自动校正内容:水平半径、碳杆长度、限位开关、Tower rotation offsets、Tower radius offsets、Surface normal (how perpendicular the towers are to the print surface) <-后面是什么鬼   原作者 GitHub:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fgithub.com%2F626Pilot%2FSmoothieware&urlrefer=677cb0979ea894de2aaf3f5eb6ab1832   校正装置:需要 Z 调平开关,或者是直接使用压敏电阻(FSR),这里有一份作者设计的 Z 自动调平装置,大概需要花费 $15 + 一些使用 3D 打印制成的零件: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.thingiverse.com%2Fthing%3A161753+&urlrefer=3c6bfb6b713233327a43704c7abfff34,还有一个更廉价的($5)——使用机械限位开关(比前两种方案精度低) http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.thingiverse.com%2Fthing%3A1000936+&urlrefer=3f58a07a91690ca338ce9da4b14df66f。窝用的是单个可拆卸的压敏配件(真心好用),某宝ID:522833004977   1.从 GitHub 下载 FirmwareBin/firmware.bin,将其放在 SD 卡中,重启。   2.从 GitHub 下载 ConfigSamples/Smoothieboard.delta 并重新适配于你的机器。   3.G29 E (调平)   4.G32 (校正限位开关/水平半径相关内容,在执行结束后别忘了按 M500!)   5.G31 H O P Q R (simulated annealing. corrects for errors in X, Y, and Z - it may help to run this multiple times)   6.G31 A (在执行结束后别忘了按 M500!)   7.
[全攻略系列]WordPress 中的 50 个过滤器 (1):何为过滤器?   本文为系列第一篇,原文:50 Filters of WordPress: An Introduction to Filters:An Introduction to Filters :http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fcode.tutsplus.com%2Ftutorials%2F50-filters-of-wordpress-an-introduction-to-filters--cms-21294&urlrefer=4553abf4a8502b641757217d0fd1fe9b   本系列文章翻译自 tutsplus,原作者为Barış Ünver,翻译人:Jeff(http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fdevework.com%2F&urlrefer=58cc39a44538ac06b062c726f1f1921d),转载请注明原始来源及翻译人,谢谢!   WordPress 是世界上最受欢迎的内容管理系统(CMS),造就这一地位的原因在于WordPress 的高扩展性。在本系列文章中,我们将要学习WordPress 中的过滤器(filters)——扩展WordPress 功能的最好方式之一。   WordPress 中有一种叫执行挂勾(hook)的基础机制,其中包括动作(Action)和过滤器 (Filter)。没有这两个东西,就没有高扩展性的 WordPress。   在本系列文章中,我们即将学到过滤器的相关知识,接下来总共有七篇文章将聚焦于以下几点:   1.WordPress 中的过滤器的定义以及如何利用这些过滤器   2.接下来的5篇文章将借助实例介绍WordPress 中的50个过滤器(平均每篇文章介绍10个)   3.最后一篇压轴文章,做最终的总结   在WordPress 的核心代码中,有以千为数量单位的过滤器,而本系列中即将要讲的不过是50个(大概10%)(数学不好,不知道怎么翻译~~),因此本系列在后续中可能会增加新的示例介绍——如果有很多人喜欢这个系列文章的话。   无论如何,让我们开始吧! WordPress 中的过滤器是什么?   在WordPress 的官方Codex 中,是这样介绍过滤器的:   过滤器是一类函数,WordPress 执行传递和处理数据的过程中,在针对这些数据做出某些动作之前的特定点运行(例如将数据写入数据库或将其传递到浏览器页面)。过滤器处于数据库与浏览器中间(当 WordPress 正在产生页面的时候),处于浏览器与数据库之间(当 WordPress 添加新的文章评论到数据库的时候);WordPress 中的多数输入与输出都经过至少一个过滤器。WordPress默认状态做了一些过滤,你的插件可以添加它自己的过滤器。   本质上,过滤器是一种在输出网站数据前进行填充(doing stuff)的功能。过滤器是 WordPress 中hook 机制的一种——另外一种是动作(action)。   尽管看起来很复杂,但过滤器(以及动作)其实很容易明白。第一次接触的时候我也是有畏惧的心理,但后来才发现它是那么简单。当我细细查阅过官方 Codex 及细细研读后,我掌握了数百个过滤器和动作的用法。 在WordPress 中使用过滤器   正如我所说,在WordPress 中使用过滤器是非常简单的。只需要明白几个基础的函数是怎样运作的你就明白它的原理。(老实说,最困难的部分是学到所有的过滤器但正如你知道的,你不可能熟知每一个过滤器的用法——只有你需要用的才去用它)   在这个部分,我们按照下面的步骤来学习:   创建一个过滤器函数   挂钩过滤器   移除某个过滤器的函数   创建自己的过滤器   创建一个过滤器函数并挂载之   为了玩转过滤器中传送过来的数据,你需要新建一个函数并定义其中的数据传送方式,然后挂载到过滤器中。   让我们举一个例子:我们打算弄个插件来移除文章标题中得元音字母(好奇葩的例子)。与其说“移除文章标题的元音字母”,不如说“将这个函数挂载到我的文章过滤器上”   很复杂吗?当然不是,让我们看看代码: <?php function remove_the_vowels( $title ) { $title = preg_replace( '/[aeiou]/i', '', $title ); return $title; } ?>   这个函数使用PHP中的 preg_replace函数来替换标题中的元音字母并返回替换后的tile 参数。很简单不是吗?让我们挂载这段函数到一个过滤器上: <?php function remove_the_vowels( $title ) { $title = preg_replace( '/[aeiou]/i', '', $title ); return $title; } add_filter( 'the_title', 'remove_the_vowels' ); ?>   注意到新的函数没有?让我们细细了解下add_filter(): <?php add_filter( $tag, $function_to_add, $priority,$accepted_args ); ?> $tag 必需,过滤器钩子的名称 $function_to_add 必需,要添加的过滤器函数 $priority 可选,过滤器函数的优先级,默认值为10 $accepted_args 可选,过滤器函数接受的参数数量,默认值为1 移除过滤器   我们可以通过remove_filter()函数移除附加在过滤器上的函数: <?php remove_filter( $tag, $function_to_remove, $priority ); ?> $tag 必需,过滤器钩子的名称 $function_to_remove 必需,要移除的过滤器函数 $priority 可选,过滤器函数的优先级   事实上还有其他一个函数remove_all_filters(),该函数仅仅需要两个参数($tag和 $priority)。正如函数名,它的作用是移除挂载在过滤器上的所有函数。 创造你的过滤器   想知道一个过滤器是如何产生的吗?这里有个特别的函数可以让你在核心代码的数百个过滤器之外创造属于你自己的过滤器。当然,它可以在核心外运行意味着你可以在自己的主题或插件中创建过滤器。   让我们看看它是如何工作的: <?php apply_filters( $tag, $value, $var1, $var2 /* ...and so on */ ); ?> $tag 必需,过滤器钩子的名称 $value 必需,可以被过滤器函数修改的值 $var 可选,若干个可以传递给过滤器函数的参数   上例子:想象下你写了个函数可以返回来自Peter Griffin 的名言: <?php function peter_griffin_quote() { $quote = "The bird is the word."; return $quote; } ?>   如果你想要这个函数到时候可以被过滤,你需要像下面这样使用apply_filters()函数: <?php function peter_griffin_quote() { $quote = "The bird is the word."; return apply_filters( 'peter_griffin_quote', $quote ); } ?>   这种情况下,当其他开发者就可以通过下面的代码: <?php function change_the_quote( $quote ) { $quote = str_replace( 'bird', 'nerd', $quote ); return $quote; } add_filter( 'peter_griffin_quote', 'change_the_quote' ); ?>   这样,每一次当peter_griffin_quote函数运行的时候,Peter Griffin 的名言都会被稍微修改。    提示:如果你想在这个方面获取更多的知识,可以参考Tuts+ 的这篇文章: [《Writing Extensible Plugins With Actions and Filters》](http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fcode.tutsplus.com%2Ftutorials%2Fwriting-extensible-plugins-with-actions-and-filters--wp-26759&urlrefer=d46f92834671ee76ccc8104c6efdba73)。这个教程是介绍如何在个人开发的主题或插件中创建过滤器或动作。 结论   写的代码越多,你就越能发现过滤器的乐趣。WordPress 中有数百个过滤器,每学习一个都能让你在成为WordPress 高手的道路上更进一步。在接下来的文章中,我们即将学习下面的10 个WordPress 过滤器: login_errors comment_post_redirect allowed_redirect_hosts body_class locale sanitize_user the_content the_password_form the_terms wp_mail_from   写这个系列的文章我很高兴(翻译我倒苦逼了~~),我希望你阅读这系列文章也是一样。如果你需要更多的帮助或者想我提供更多的过滤器介绍,请不要吝惜你的希望之情,同时,不要忘记分享这篇文章!(翻译也是啊!!)   下一篇文章再见!
[全攻略系列]WordPress 模版标签全攻略:前言   本系列所有文章皆为依据 Barış Ünver:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Ftutsplus.com%2Fauthors%2Fbaris-unver+&urlrefer=7f287143ad0965fccd81a0a6470ab282 提供英文版翻译而来,感谢作者分享!本系列翻译文章发布于 WordPress 吧,禁止转载。   不用多说我们都知道,WordPress 是一个非常强大的内容管理系统,而它的力量正来源于其可拓展性。若一个产品可以被 DIY,人们将毫无保留地为它贡献——从而提升知名度,将被更多更多的新用户所发现……以此无限循环,最终成为完整的生态系统。这也就是 WordPress 在十年后的今天依然流行于全世界的原因。   我们说过了过滤器(Filters)、动作(Actions)、条件标签(Conditional Tags)……而在本系列文章中,您将学习到 WordPress 的基本概念之一——模版标签(Template Tags)。 Barış Ünver 大神,什么是模版标签?   在强大的 WordPress 中,有两个主要的功能展示了其伟大的扩展性——“插件”(增强功能)和 “主题”(改变设计)。然而这两个特点的成功却离不开身后——WordPress 的核心概念:函数(Functions)、类(Classes)、APIs……当然,其中一个概念就是这篇文章所讲的东西——它叫做模板标签。   模板标签是一个核心概念,它的历史可以追溯在 WordPress 的前身:B2——“博客工具”,Matt Mullenweg 和 Mike Fork 了它随即创建了现在的 WordPress 模板标签。 在 WordPress 文档里,他被描述成这样:   模版标签常用于动态地显示某些信息,它就像一个提供给您的工具——让您的博客可以被自主定制,变得越来越有趣!简单来说,模版标签就是几个(好吧几十个几百个)让 WordPress 为你做事的 PHP 函数而已。相信我,它们绝对不会让您头昏眼花——嘛当然前提是您会些 PHP 和 HTML 咯。 这些神奇的标签在哪?   它们都被保存到了一个叫做 wp-includes 的文件夹里,需要注意的是——这里有九个同种后缀 -template 的文件需要注意: wp-includes/author-template.php 储存文章作者相关模版标签 wp-includes/bookmark-template.php 储存书签相关模版标签 wp-includes/category-template.php for template tags about all taxonomies and terms, including categories and tags wp-includes/comment-template.php 储存评论部分相关模版标签 wp-includes/link-template.php for 储存链接相关模版标签(永久链接 - Permalinks、附件链接、归档链接等) wp-includes/nav-menu-template.php 储存导航菜单相关模版标签 wp-includes/post-template.php 储存相关文章模版标签 wp-includes/post-thumbnail-template.php 储存文章缩略图相关模版标签 wp-includes/general-template.php 储存其他可用在任意位置的模版标签 在 WordPress 中使用模版标签   像我之前说的,“模版标签” 根本就没这么难嘛——会点 HTML、CSS、PHP,随意上手。但尽管如此,有些事情我们必须知晓…… 模版标签函数   除了“内置标签”和“条件标签”(他们是“模板标签”大家庭中的一部分),模板标签的功能实际上可以分为两类:用于输出(Echo)的标签、以及用于返回(Return)的标签。这两种功能形式的模板标签会为您开发新的主题带来不少方便哦。   那么,怎么区分这两类标签呢?一般以get_为前缀的模版标签作为返回使用;而相应地,以the_为前缀的模版标签作为输出使用。来看下面的例子: <?php function the_ID() { echo get_the_ID(); } ?> 模版标签函数 - 参数   有点小难,是因为这一部分翻译得各种糟糕。   有一定编程基础的同学们一定对“参数”不太陌生——当定义一个函数(Function)时,参数一般用于改变该函数的行为或是改变它所返回的值。通过参数,您可以对在输出内容前或后添加一些自己想要的东西,比如说限制下返回的数据的数量、过滤掉某文章中部分内容……好现在我们来举个比方,打个例子=-=|| 模版标签函数 - 参数声明   目前共有三种方法可以为模版标签声明参数:    最常用的方式:像真正的 PHP 函数那样在括号里声明,参数与参数之间用,隔开: <?php $my_post_meta = get_post_meta( $post->ID, 'my_post_meta', true ); ?>    使用字符串式声明:有点丑见下: <?php wp_link_pages( 'before=<p class="page-links">' . __( 'Pages:' ) . ' &after=</p>&seperator=<span class="sep"> &middot; </span>' );?>   毫无疑问,使用字符串式声明参数简直反人类,所以一种新的方法又粗线了……    使用数组方式声明:比 query-strings 简洁多了—— <?php $args = array( 'menu_class' => 'my-primary-menu', 'theme_location' => 'primary', 'after' => '<hr class="menu-bottom" />'); wp_nav_menu( $args );?>   需要记住的是,更为简洁的数组方式实际上和所谓的反人类字符串等价,但第一种最常用的声明参数方式却不能与其它两种方式互换。若该函数支持使用第一种方式声明参数,那么别无选择——仅可如此使用。   如果还是感觉很困惑——查文档去吧=w= 总结   到此已经介绍结束 WordPress 主题标签的全部用法。现在,我们可以开始一个一个地学习模版标签的用法了。在本系列的下一部分中,我们将浏览 WordPress Codex 中所有的模版标签(包括描述、参数定义等)。 Via:http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwplog.org%2Ftopics%2F93&urlrefer=1d69fbdca911e201504ceff786c6ad04
=w=新手上路,关于VEX+Arduino做道闸的问题 代码在这里~只用了VEX的那个直流电机、两个限位开关和两个FC-04的超声波…… #include <Servo.h> #define MOTOR_PIN 7 // define the PWM range for the VEX speed controll #define MIN_POS 1000 // 0 #define MAX_POS 2000 // 255 #define CENTER_POS 1500 // 127 Servo myservo; const int TrigPin = 2; const int EchoPin = 3; const int SecondTPin = 4; const int SecondEPin = 5; const int bumperup = 8; const int bumperdown = 9; bool motor; int uval,dval; float cm1,cm2; void setup() { Serial.begin(9600); pinMode(TrigPin, OUTPUT); pinMode(EchoPin, INPUT); pinMode(SecondTPin, OUTPUT); pinMode(SecondEPin, INPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(bumperup,INPUT); digitalWrite(bumperup,HIGH); pinMode(bumperdown,INPUT); digitalWrite(bumperdown,HIGH); myservo.attach(MOTOR_PIN); motor = false; } void loop() { myservo.attach(MOTOR_PIN); digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin delayMicroseconds(2); digitalWrite(TrigPin, HIGH); delayMicroseconds(10); digitalWrite(TrigPin, LOW); cm1 = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm cm1 = (int(cm1 * 100.0)) / 100.0; //保留两位小数 delay(100); digitalWrite(SecondTPin, LOW); //低高低电平发一个短时间脉冲去TrigPin delayMicroseconds(2); digitalWrite(SecondTPin, HIGH); delayMicroseconds(10); digitalWrite(SecondTPin, LOW); cm2 = pulseIn(SecondEPin, HIGH) / 58.0; //将回波时间换算成cm cm2 = (int(cm2 * 100.0)) / 100.0; //保留两位小数 delay(100); uval = digitalRead(bumperup); Serial.print(cm1); Serial.print("cm1"); Serial.println(); Serial.print(cm2); Serial.print("cm2"); Serial.println(); uval = digitalRead(bumperup); dval = digitalRead(bumperdown); delay(10); if(0<cm1<=30) { uval = digitalRead(bumperup); while(uval == HIGH && motor == false) { myservo.writeMicroseconds(MIN_POS); uval = digitalRead(bumperup); } myservo.writeMicroseconds(CENTER_POS); motor = true; } delay(10); dval = digitalRead(bumperdown); myservo.writeMicroseconds(CENTER_POS); if(cm1>=30 && cm2>=30) { while(dval == HIGH && motor == true) { myservo.writeMicroseconds(MAX_POS); dval = digitalRead(bumperdown); } myservo.writeMicroseconds(CENTER_POS); motor = false; } } 然而症状是……无论超声波的值是虾米,道闸只会一直向上和向下……求救QAQ
【刻不容缓】尽快升级至4.2.1!WordPress曝存储型XSS漏洞。   Via @Freebuf:http://www.freebuf.com/news/65926.html。   WordPress官方在4月21日发布了新的版本4.1.2,其中提到修复了一个严重的存储型XSS漏洞。不久之后便有人给出了漏洞的细节。而安全研究团队Klikki Oy发现在,新版本(<=4.2)的Wordpress中仍然可以利用该漏洞。 XSS漏洞一(WordPress 4.1.1 及其之前版本均受影响)   这次的XSS漏洞出现在wordpress的留言处,不过问题是由mysql的一个特性引起的。在mysql的utf8字符集中,一个字符由1~3个字节组成,对于大于3个字节的字符,mysql使用了utf8mb4的形式来存储。如果我们将一个utf8mb4字符插入到utf8编码的列中,那么在mysql的非strict mode下,他的做法是将后面的内容截断。 XSS漏洞二(WordPress 4.2及以下版本均受影响)   就在不久之前,安全研究团队Klikki Oy发现在新版本的wordpress中仍然可以利用该漏洞,漏洞形成的原理是一样的,利用截断来造成页面布局混乱,只不过这次Klikki Oy利用了mysql的另外一个特点。   在WordPress wp_comments表中存储留言的列为comment_content,他的类型为text。Text 最大可以存储64kb的数据,如果用户输入了大 于64kb的数据,mysql的做法依然是将后面的内容截断,由于 WordPress 并没有限制留言内容的长度,所以当我们提交大于64kb的留言内容 时,依然可以造成页面布局的混乱,形成XSS漏洞。
美化 WordPress - 用 Flat UI 定制漂亮的自定义登录页面   已经有许多朋友向我反映到 WordPress 的后台登录界面不敢恭维,“不够现代化”、“死气沉沉”……这次 PC 就与各位一起分享上图登录表单的实现方法,如果你也有同样的感受,不如一起来试试吧。   文章使用 Flat UI 框架:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.bootcss.com%2Fp%2Fflat-ui%2F&urlrefer=1e7eca8abba77b2e009fd7483fc07619,请先下载。   翻译自:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fdesignmodo.com%2Fwordpress-custom-login%2F&urlrefer=1ca7a0298deec7962dc3a7047bbb249c   本文来源:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.mywpku.com%2Fwordpress-custom-login-by-flat-ui.html+&urlrefer=3d47333276010387093ba210cdd735c6 开始工作   我们可以将其做成一款插件,这样 WordPress 更新后样式依然可以保留。在wp-content/plugins 目录内创建名为flatui 的文件夹,并在内创建同名文件:flatui.php ,在此文件输入以下内容并保存: <?php /* Plugin Name: Designmodo Login Form Plugin URI: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fdesignmodo.com&urlrefer=072e377c14e8bfc7dc602cb239b2a4d8 Description: Simple Login form plugin that just work Version: 1.0 Author: Agbonghama Collins Author URI: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Ftech4sky.com&urlrefer=d652df800a7093b281e6aa1ae27619a7 */   别忘了我们的样式是使用 Flat UI 来设计的,下载前面提到的框架并解压,将dist 文件夹内的js 、img 、fonts 、css 四个目录上传到插件目录里。   继续为flatui.php 添加内容: function dlf_form() { ?> <form method="post" action="<?php echo $_SERVER[*REQUEST_URI*]; ?>"> <div class="login-form"> <div class="form-group"> <input name="login_name" type="text" class="form-control login-field" value="" placeholder="Username" id="login-name" /> <label class="login-field-icon fui-user" for="login-name"></label> </div> <div class="form-group"> <input name="login_password" type="password" class="form-control login-field" value="" placeholder="Password" id="login-pass" /> <label class="login-field-icon fui-lock" for="login-pass"></label> </div> <input class="btn btn-primary btn-lg btn-block" type="submit" name="dlf_submit" value="Log in" /> </form> </div> <?php }   除此之外,我们仍需验证 WordPress 的用户名和密码,继续添加内容: function dlf_auth( $username, $password ) { global $user; $creds = array(); $creds[*user_login*] = $username; $creds[*user_password*] = $password; $creds[*remember*] = true; $user = wp_signon( $creds, false ); if ( is_wp_error($user) ) { echo $user->get_error_message(); } if ( !is_wp_error($user) ) { wp_redirect(home_url(*wp-admin*)); } }   当输入错误的用户名或密码时,页面会提示错误信息,并给出找回密码链接:  函数dlf_process 的执行过程:在前端显示登录表单→判断登录表单是否被加载→检验用户名密码是否正确→是否dlf_auth 函数正常。如果账号正常登陆后,将被重定向到管理面板。   添加内容: function dlf_process() { if (isset($_POST[*dlf_submit*])) { dlf_auth($_POST[*login_name*], $_POST[*login_password*]); } dlf_form(); }   为了让我们的后台登录界面更加精致,还需要将刚刚解压的 Flat UI 和 Bootstrap 框架在头部载入,添加内容: function flat_ui_kit() { wp_enqueue_style(*bootstrap-css*, plugins_url(*css/vendor/bootstrap.min.css*, __FILE__)); wp_enqueue_style(*flat-ui-kit*, plugins_url(*css/flat-ui.min.css*, __FILE__)); } add_action(*wp_enqueue_scripts*, *flat_ui_kit*);   就差一点了!接下来如果需要嵌入新的登录表单,下面函数定义了 [dm_login_form] 快捷代码,可在编辑器里添加到文章和页面里: function dlf_shortcode() { ob_start(); dlf_process(); return ob_get_clean(); } add_shortcode(*dm_login_form*, *dlf_shortcode*); 大功告成!   接下来,启用我们刚刚写好的插件→Designmodo Login Form ,文章/页面的编辑界面内输入[dm_login_form] 即可直接引用优雅的 Flat UI 登录表单哦。
WordPress 回复可见的实现方法   我们经常在各种论坛上看到“回复后可见隐藏内容”的字样,这样既保证了帖子能让更多人看到,也可以防止贴文被恶意转载。那么在WordPress上如何实现这样效果呢?一起来看看吧。   还是建议大家少用这样的功能。 在functions.php中插入如下代码:请注意修改其中的Email地址哦! function reply_to_read($atts,$content=null){ extract(shortcode_atts(array("notice"=>*<span class="reply-to-read">此处内容需要<a href="*. get_permalink().*#respond" title="评论本文">评论本文</a>后<a href="javascript:window.location.reload();" title="刷新">刷新本页</a>才能查看.</span>*),$atts)); $email=null; $user_ID=(int)wp_get_current_user()->ID; if($user_ID>0){ $email = get_userdata($user_ID)->user_email; //如果用户已登录,从登录信息中获取email }else if(isset($_COOKIE[*comment_author_email_*.COOKIEHASH])){ $email=str_replace(*%40*,*@*,$_COOKIE[*comment_author_email_*.COOKIEHASH]); //如果用户未登录但电脑上有本站的Cookie信息,从Cookie里读取email }else{ return $notice; //无法获取email,直接返回提示信息 } if(empty($email)){ return $notice; } global $wpdb; $post_id=get_the_ID(); //文章的ID $query="SELECT `comment_ID` FROM {$wpdb->comments} WHERE `comment_post_ID`={$post_id} and `comment_approved`=*1* and `comment_author_email`=*{$email}* LIMIT 1"; if($wpdb->get_results($query)){ return $content; //查询到对应的已经审核通过的评论则返回内容 }else{ return $notice; //否则返回提示信息 } } add_shortcode(*reply*, *reply_to_read*);
Ality – 简洁响应式WordPress博客主题   来自知更鸟作品,自从经典 HotNews Pro 诞生后,这是第二款免费发布的 WordPress 博客主题。依然处处用心,HTML5+CSS3响应式布局,适合不同分辨率设备浏览;采用图标字体,Retina(视网膜)显示,并且兼容IE6+、 Firefox、Chrome、Opera、Safari等主流浏览器。   同时该主题集成的数十项功能更是满足了专业博客的需要,在使用中还请保留页脚设计者链接,不得将本作品用于商业目的,包括所有页面元素! 主题特点 图片延迟加载,包括评论 Gravatar 头像; 集成热门文章、随机文章、相关文章、近期留言等自定义小工具; 最近留言、代码高亮、联系表单等多个独立页面模板; 不同页面显示不同侧边栏小工具; 首页置顶文章并突出显示; 图片lightbox查看; 首页排除指定分类文章; 首页选择文章排序; 最新文章角标提示; 主题设置面板; 分页导航; 编辑器增强,并且编辑窗口显示的样式与前端相同。 移除头部冗余代码; ajax评论; 集成SEO功能; 自动缩略图,并支持特色图像功能; 滚动公告; 集成百度站内搜索; 集成百度推荐; 集成百度分享; 前台登录; 下载链接按钮; 集成代码高亮。 必装插件  主题部分功能比如:热门文章小工具,需要用到文章浏览计数插件:WP-Postviews,可以在后台插件安装中搜索该插件。 首页文章置顶  首页置顶文章突出显示。文章置顶方法: 方法一、编辑文章时,左侧发布面板 → 公开度 → 勾选“将文章置于首页顶端” 方法二、打开所有文章页面 → 快速编辑 → 勾选“置顶这篇文章 ” 添加滚动公告  1、发布公告   启用主题后,进入后台,在左侧功能菜单中新增公告菜单,点击“发布公告”,进入公告编辑页面,其它与正常编辑发表文章相同。  2、显示公告   进入主题选项(后台 > 外观 > 主题选项)页面,在综合设置中勾选“显示公告”。 下载按钮  第一步,编辑文章时切换到文本(HTML)模式,点击编辑器工具栏上的“下载按钮”,在适当位置添加短代码“[file]”  第二步,添加自定义栏目,名称:button1 ,值:输入文字,比如:主题下载(用于启动下载弹窗及显示下载弹窗中的按钮);  第三步,继续添加自定义栏目,名称:url1 ,值:下载文件链接;  多个下载链接重复第二步和第三步,自定义栏目名称:button2、button3、button4 与url2、url3、url4共支持4个。 主题截图 1、首页截图2、文章页截图主题下载地址:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Ffile.mywpku.com%2FAlity&urlrefer=e99508f4fd5b472758d29880a93af559[MYWPKu.COM].zip 来源:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.mywpku.com%2Fality.html&urlrefer=9cc919a9f46dbecb8fbccdce80afbc5a 下载地址均为直链
美化 WordPress – 用 Flat UI 定制漂亮的自定义登录页面   已经有许多朋友向我反映到 WordPress 的后台登录界面不敢恭维,“不够现代化”、“死气沉沉”……这次PC就与各位一起分享上图登录表单的实现方法,如果你也有同样的感受,不如一起来试试吧。   文章使用 Flat UI 框架:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fdesignmodo.com%2Fflat-free%2F&urlrefer=ae9f8469036f8572f31d2ae44dcef122 开始工作   我们可以将其做成一款插件,这样 WordPress 更新后样式依然可以保留。在 wp-content/plugins 目录内创建名为 flatui 的文件夹,并在内创建同名文件:flatui.php ,在此文件输入以下内容并保存: <?php /* Plugin Name: Designmodo Login Form Plugin URI: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fdesignmodo.com&urlrefer=072e377c14e8bfc7dc602cb239b2a4d8 Description: Simple Login form plugin that just work Version: 1.0 Author: Agbonghama Collins Author URI: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Ftech4sky.com&urlrefer=d652df800a7093b281e6aa1ae27619a7 */   别忘了我们的样式是使用 Flat UI 来设计的,下载前面提到的框架并解压,将css 、 font 、 bootstrap 三个目录上传到插件目录里。   继续为 flatui.php 添加内容: function dlf_form() { ?> <form method="post" action="<?php echo $_SERVER[*REQUEST_URI*]; ?>"> <div class="login-form"> <div class="form-group"> <input name="login_name" type="text" class="form-control login-field" value="" placeholder="Username" id="login-name" /> <label class="login-field-icon fui-user" for="login-name"></label> </div> <div class="form-group"> <input name="login_password" type="password" class="form-control login-field" value="" placeholder="Password" id="login-pass" /> <label class="login-field-icon fui-lock" for="login-pass"></label> </div> <input class="btn btn-primary btn-lg btn-block" type="submit" name="dlf_submit" value="Log in" /> </form> </div> <?php }   除此之外,我们仍需验证 WordPress 的用户名和密码,继续添加内容: function dlf_auth( $username, $password ) { global $user; $creds = array(); $creds[*user_login*] = $username; $creds[*user_password*] = $password; $creds[*remember*] = true; $user = wp_signon( $creds, false ); if ( is_wp_error($user) ) { echo $user->get_error_message(); } if ( !is_wp_error($user) ) { wp_redirect(home_url(*wp-admin*)); } }   当输入错误的用户名或密码时,页面会提示错误信息,并给出找回密码链接:  函数 dlf_process 的执行过程:在前端显示登录表单→判断登录表单是否被加载→检验用户名密码是否正确→是否 dlf_auth 函数正常。如果账号正常登陆后,将被重定向到管理面板。   添加内容: function dlf_process() { if (isset($_POST[*dlf_submit*])) { dlf_auth($_POST[*login_name*], $_POST[*login_password*]); } dlf_form(); }   为了让我们的后台登录界面更加精致,还需要将刚刚解压的 Flat UI 和 Bootstrap 框架在头部载入,添加内容: function flat_ui_kit() { wp_enqueue_style(*bootstrap-css*, plugins_url(*bootstrap/css/bootstrap.css*, __FILE__)); wp_enqueue_style(*flat-ui-kit*, plugins_url(*css/flat-ui.css*, __FILE__)); } add_action(*wp_enqueue_scripts*, *flat_ui_kit*);   就差一点了!接下来如果需要嵌入新的登录表单,下面函数定义了 [dm_login_form] 快捷代码,可在编辑器里添加到文章和页面里: function dlf_shortcode() { ob_start(); dlf_process(); return ob_get_clean(); } add_shortcode(*dm_login_form*, *dlf_shortcode*); 大功告成!   接下来,启用我们刚刚写好的插件→ Designmodo Login Form ,文章/页面的编辑界面内输入 [dm_login_form] 即可直接引用优雅的 Flat UI 登录表单哦。 原文来自:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fdesignmodo.com%2F&urlrefer=299f6fa1acb77bc998427d6ac63b0439 翻译:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.mywpku.com%2Fwordpress-custom-login-by-flat-ui.html&urlrefer=a0cc47694adf4506947fe0f7f490e086
Pagekit 中文文档(三)配置文件 <!-- * @author PCDotFan --> # 配置文件 <p class="uk-article-lead">修改配置文件 变更 Pagekit 高级设置</p> 配置文件保存在 Pagekit 根目录下的 `config.php` 。这里你将找到数据库设置,调试设置,分析器(profiler)设置以及缓存设置。亦或是于 Pagekit 控制面板*设置 > 系统* 修改选项,同样可以达到相同的效果。 ## 数据库 数据库连接信息保存在 `database[*connections*]` ,是不是觉得有一些熟悉?在第一次的安装程序(Installer)时,我们曾经提供过这些信息: ```php *database* => [ *default* => *mysql*, *connections* => [ *mysql* => [ *host* => *localhost*, *user* => *user*, *password* => *pass*, *dbname* => *pagekit*, *prefix* => *pk_*, ], ], ], ``` **Note** 它也支持配置多个数据库连接哦! 默认数据库类型被定义为 `database[*default*]` ,在以上的例子中我们选用 *mysql* 。 ## App 于 `app` 部分可以任意开启或关闭调试输出(debug output)、缓存(cache)。在开发主题(theme)、拓展(extension)时会非常有用! | 字段 | 描述 | |-------|-------------| | `key` | 这是一个用于加密的独特密钥。 | | `debug` | 开启调试模式(debug mode)。 | | `nocache` | 禁用缓存。 | ```php *app* => [ *key* => *66235f24939aa374932d09bd2805fdb93d064d6d*, *debug* => *0*, *nocache* => *0*, ], ``` ## 缓存 在 `cache` 部分配置缓存方法存储。原先默认缓存设置为 `auto` 。 | 设置 | 描述 | |---------|-------------| | `auto` | Pagekit 将会自动选择最佳的缓存加速器。 | | `apc` | 使用 [APC](http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.php.net%2Fmanual%2Fde%2Fbook.apc.php&urlrefer=806004af505991083913c4ad12598e58) 缓存加速器。| | `file` | Set the caching method to store caching data in a file in */app/cache* | ```php *cache* => [ *caches* => [ *main* => [ *storage* => *auto* ] ] ], ``` ## 分析器(Profiler) 开启分析器(profiler)会给开发者们更多有价值的信息。它将收集所生成的请求数据、监控内存用量、统计数据库查询次数等等。 启动时,分析器工具条(profiler toolbar)将常驻于页面底部。 | 字段 | 描述 | |-------|-------------| | `enabled` | 设置分析器的(profiler)开闭。 | ```php *profiler* => [ *enabled* => *0*, ], ```
Pagekit 中文文档(一)快速开始 <!-- * @author PCDotFan --> # 快速开始 此篇文档将会带领你浏览 Pagekit 的完整安装过程。 下载 Pagekit:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.pagekit.com&urlrefer=cec8827e58b367fd17a69c2c76063cec ## 运行环境 确定你的服务器满足以下必备条件: - Apache 2.2+ - MySQL Server 5.1+ - PHP Version 5.4.0+ 除此之外, Pagekit 还需要某些 PHP 拓展(extensions)的支持。你可以从这里获得完整的 [服务器需求部分](troubleshooting.md). ## 安装 首先,解压已下载的 Pagekit 压缩包并将内容复制到需使用的网站服务器目录下。 ### 1. 设置权限 在开始安装之前,请确保刚刚上传的文件夹已经按照要求设置好正确的权限。我们推荐将其设置为 *755*。 Pagekit 需要以下的文件和目录保持可写状态: | 文件 / 文件夹 | 描述 | |------------------|-------------| | `/app` | 存储临时文件、缓存、日志文件。 | | `/extensions` | 用于安装及升级拓展(extensions)。 | | `/storage` | 存储您上传至网站的文件。 | | `/themes` | 用于安装及升级主题(themes) | | `config.php` | 安装器(Installer)将会写入此文件。 | 实际的权限设置取决于用户的服务器运行以及文件夹的所有者。如果你的服务器设置755权限存在问题,你也可以尝试 *775* ,若实在不行则 *777*。 **重要** 你应该尽量避免在正式运行的服务器上设置 *777* 权限,因为这将允许任何人有权访问并任意编辑文件。 ### 2. 创建数据库 下一件事,我们需要用类似于 [phpMyAdmin](http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhttp%3A%2F%2Fwww.phpmyadmin.net%2F&urlrefer=4dde4a9070ce0473f5baf88be82059d1) 的工具创建一个为 Pagekit 专门使用的空数据库。如果你的主机仅允许创建一个数据库,并且此数据库已有其他程序在正常使用,你同样可以设置与其不同的表前缀(Pagekit prefixes)以避免冲突。 ### 3. 运行安装程序 现在我们已经准备好运行 Pagekit 的安装程序啦!打开浏览器并转到服务器上的 Pagekit 安装页面(`/installer`)。例如:`http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fexample.com%2Fpagekit%2Finstaller&urlrefer=7f00017fb84eeb2cb4cb142384ee7764`。就这样,让我们进入优美的安装界面吧~ #### 步骤一 - 数据库信息 在安装过程中,我们先给 Pagekit 一些信息来连接数据库。(还记得上一步做的吗?) | 字段 | 描述 | |-------|-------------| | `数据库主机` | 输入数据库主机名,如果网站服务器与数据库服务器于同一台机器上,这里应该填写 *localhost* 或 *127.0.0.1*。 | | `用户名` | 输入一个可连接至数据库的MySQL用户名。 | | `密码` | 输入MySQL用户密码。 | | `数据库名` | 输入数据库名。 | | `表前缀` | 您可以更改用于数据库表的前缀,默认为`pk_`。 | #### 步骤二 - 创建用户 为了 Pagekit 创建一个账户吧,此账户将拥有管理员权限。在安装完成后可立即登录 Pagekit 控制面板。 #### 步骤三 - 站点设置 最后,请输入站点名称及对应的描述。你可以通过在网址后添加`/admin`进入登录界面。 ## 更新 在执行更新之前,请确定你已做好当前备份的准备。这样做总是可以在特殊情况下将网站恢复至先前的状态。 ### 一键升级 你可以用 Pagekit 内置的管理功能更新程序。打开 *设置 > 更新* 并点击 *更新* 按钮。 ### 手动更新 下载最新发布的 Pagekit 版本 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpagekit.com&urlrefer=d50157b79e48d57d31799ddd4076f709 并直接解压。 现在上传新版程序至服务器,覆盖在 Pagekit 现有文件的文件夹。 为了知晓是否升级成功,只需要进入 *设置 > 信息* 查看。如果一切进行顺利, 你应该可以在 *Pagekit 版本* 那看到有些变化。 Enjoy it~
免插件实现No Category Base效果:去除分类标志   WordPress对于分类目录的链接是这样定义的:http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fxx.com%2Fcategory%2Fdiary&urlrefer=795ea5f47e32025ebbd5d1216d495c8f,其中的category部分难免觉得有一些多余,且百度等搜索引擎也会将这样的链接划定至不友好的区域。如果你对博客的SEO方面特别重视,不妨试一下!   加入该代码至主题文件functions.php: <?php add_action( 'load-themes.php', 'no_category_base_refresh_rules'); add_action('created_category', 'no_category_base_refresh_rules'); add_action('edited_category', 'no_category_base_refresh_rules'); add_action('delete_category', 'no_category_base_refresh_rules'); function no_category_base_refresh_rules() { global $wp_rewrite; $wp_rewrite -> flush_rules(); } add_action('init', 'no_category_base_permastruct'); function no_category_base_permastruct() { global $wp_rewrite, $wp_version; if (version_compare($wp_version, '3.4', '<')) { $wp_rewrite -> extra_permastructs['category'][0] = '%category%'; } else { $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%'; } } add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules'); function no_category_base_rewrite_rules($category_rewrite) { $category_rewrite = array(); $categories = get_categories(array('hide_empty' => false)); foreach ($categories as $category) { $category_nicename = $category -> slug; if ($category -> parent == $category -> cat_ID)// recursive recursion $category -> parent = 0; elseif ($category -> parent != 0) $category_nicename = get_category_parents($category -> parent, false, '/', true) . $category_nicename; $category_rewrite['(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]'; $category_rewrite['(' . $category_nicename . ')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]'; $category_rewrite['(' . $category_nicename . ')/?$'] = 'index.php?category_name=$matches[1]'; } global $wp_rewrite; $old_category_base = get_option('category_base') ? get_option('category_base') : 'category'; $old_category_base = trim($old_category_base, '/'); $category_rewrite[$old_category_base . '/(.*)$'] = 'index.php?category_redirect=$matches[1]'; return $category_rewrite; } add_filter('query_vars', 'no_category_base_query_vars'); function no_category_base_query_vars($public_query_vars) { $public_query_vars[] = 'category_redirect'; return $public_query_vars; } add_filter('request', 'no_category_base_request'); function no_category_base_request($query_vars) { if (isset($query_vars['category_redirect'])) { $catlink = trailingslashit(get_option('home')) . user_trailingslashit($query_vars['category_redirect'], 'category'); status_header(301); header("Location: $catlink"); exit(); } return $query_vars; } ?>
1 下一页