WordPress 开发者工具箱(上)

很好的WordPress资源,先收录到这里,慢慢研究。

这是来自 Smashing Magazine 的一份 WordPress 开发资源清单,涵盖了WordPress 教程,WoredPress 主题开发,定制,WordPress 目录与导航菜单,以及将 WordPress 的 CMS 应用等各种开发资源。本文将分为两个部分发表。这是第一部分。

1. 实用资源
The WordPress Help Sheet
这是一个单页的 PHP 代码片段集,用于 WordPress 主题开发。
The Advanced WordPress Help Sheet
上面的 WordPress 的帮助表单的略高级版
Huge Compilation of WordPress Code
代码片段,用于各种功能
WordPress Template Tag Reference Guide
主题开发时会用到的 WordPress 模板标签参考
Unraveling the Secrets of WordPress’ comments.php File
WordPress comments.php 探秘
48 Unique Ways to Use WordPress
WordPress 的48种独特应用
Theme Switcher Reloaded
显示多种 WordPress 主题演示
2. WordPress 教程 2.1 WordPress 主题创建 ABC
Designing for WordPress
Chris Coyier 撰写的 CSS 技巧
Developing a WordPress Theme
开发 WordPress 主题教程
How to Create a WordPress Theme from Scratch
从零开始开发 WordPress 教程
How to Create WordPress Themes from Scratch - Part 1
从零开始开发 WordPress 主题教程 - 第1部分
How to Create WordPress Themes from Scratch - Part 2
从零开始开发 WordPress 主题教程 - 第2部分
Dissection of a WordPress Theme - Part 1, Part 2, Part 3, Part 4
详细介绍了 WordPress 主题的构成,以及如何创建 WordPress 主题
So You Want to Create WordPress Themes Huh?
非常出色的 WordPress 主题创建系列教程
From XHTML/CSS to WordPress
将已有站点的XHTML/CSS 转换成 WordPress 主题
2.2. WordPress 技巧
WordPress Theme Hacks
WordPress 主题开发中用到的一些代码和技巧
Mastering Your WordPress Theme Hacks and Techniques
另一个 WordPress 主题开发技巧系列
The Most Desired WordPress Hacks: 11 Common Requests and Fixes
WordPress 自定义数据,菜单,目录,作者等内容的一些深度剖析与技巧
2.3. WordPress 目录
Removing Several Categories from the Loop in WordPress
有时候,你想将一些帖子从特定目录中转出来,该教程会教你如何做
Displaying WordPress Categories in a Horizontal Dropdown Menu
使用 CSS 和 JavaScript 创建 WordPress 目录导航系统
2.4. 将 WordPress 用作 CMS
How to Use WordPress as a Membership Directory
如何使用 WordPress 创建会员目录系统
Using a WordPress Page as Your Homepage
在某些项目中,你可能希望使用一个静态网页,而不是最新博客文章列表作为你的博客站的首页,这篇文章教你如何实现
Build a Dynamic Design Portfolio with WordPress
创建基于 WordPress 的产品展示网站
本文国际来源:http://www.smashingmagazine.com/2008/09/15/wordpress-developers-toolbox/
中文翻译:COMSHARP CMS

复制文本框中的数据

有时,我们需要从用户窗体的文本框中复制数据,然后将其粘贴到其它地方。下面举例说明具体的操作方法。
示例一:如下图1所示,在示例窗体中有一个文本框和一个命令按钮。当窗体被激活时,文本框中自动显示文字“完美Excel”,单击“复制”按钮后,将文本框中的数据复制到剪贴板。

test11

test11

图1:带有文本框和命令按钮的用户窗体
首先,按图1设计好用户窗体界面。然后,在该用户窗体模块中,输入下列代码:
Dim myClipboard As New DataObject

Private Sub UserForm_Activate()
    Me.TextBox1.Value = “完美Excel”
End Sub

Private Sub CommandButton1_Click()
  With myClipboard
    .SetText Me.TextBox1.Text
    .PutInClipboard
  End With
End Sub

示例二:在用户窗体中有多个文本框,要求单击按钮后将有数据的文本框中的数据全部复制到剪贴板。

test21

test21

图2:带有6个文本框和1个命令按钮的用户窗体
首先,按图2设计好用户窗体界面。然后,在用户窗体模块中,输入下列代码:
Dim strUnion As String

Private Sub CommandButton1_Click()
    Dim dObj As DataObject
    With Me
        If Not .TextBox1 = Empty Then strUnion = strUnion & .TextBox1
        If Not .TextBox2 = Empty Then strUnion = strUnion & vbCrLf & .TextBox2
        If Not .TextBox3 = Empty Then strUnion = strUnion & vbCrLf & .TextBox3
        If Not .TextBox4 = Empty Then strUnion = strUnion & vbCrLf & .TextBox4
        If Not .TextBox5 = Empty Then strUnion = strUnion & vbCrLf & .TextBox5
        If Not .TextBox6 = Empty Then strUnion = strUnion & vbCrLf & .TextBox6
    End With
    
    Set dObj = New DataObject
    
    dObj.SetText strUnion, 1
    dObj.PutInClipboard
End Sub

基于单元格中的值加亮相应的单元格

用户的需求多种多样,问题也“千奇百怪”。看看下面的问题:
在工作簿中有两个工作表Sheet1和Sheet2,要求在工作表Sheet1中的某单元格中输入一个值后,工作表Sheet2中的相应单元格会基于这个值加亮相应的单元格。例如,在工作表Sheet1的单元格A2中输入值2,则在工作表Sheet2中从B2开始的两列单元格将加亮显示,即B2和C3加亮显示;在工作表Sheet1的单元格A3中输入值3,则在工作表Sheet2中从B3开始的三列单元格将加亮显示,即B3、C3和D3加亮显示,等等。如下图所示。
test1
图1:在工作表Sheet1中输入数值
test2
图2:在工作表Sheet2中的结果
在工作表Sheet1的代码模块中输入如下代码:
Private Sub Worksheet_Change(ByVal Target As Range)
   Const WS_RANGE As String = “A:A”
   On Error GoTo ws_exit
   Application.EnableEvents = False
   If Not Intersect(Target, Me.Range(WS_RANGE)) Is Nothing Then
       With Target
         If IsNumeric(.Value) Then
           Worksheets(”Sheet2″).Cells(.Row, “B”).Resize(, .Value).Interior.ColorIndex = 38
         End If
       End With
    End If
ws_exit:
    Application.EnableEvents = True
End Sub

使用Excel工作表来安排工作——OnTime事件

前不久,有位朋友问:由于工作太多太杂,导致经常常忘记要做的事情,希望利用Excel工作表来定时提醒要进行的工作。也就是说,在到达某个时刻后,工作表中的文本框会自动显示该时刻应该做的工作。如下面的图1和图2所示,图1为工作安排表,A列为工作安排,B列为开始该工作的时间;图2为用于显示当前应进行的工作。
test1
图1:工作安排表,在A列中是工作安排,B列中是工作开始的时间。可根据需要修改和添加
test2
图2:显示当前工作的界面。单击“显示”按钮后程序开始工作,当达到某时刻后,文本框中会显示当前应进行的工作
(注:这只是示例,可以根据自已的实际需要在图1的工作表中增加工作安排及相应的时间)
程序代码如下:
Option Explicit
Sub DisplayData()
    Application.OnTime Now + TimeSerial(0, 0, 1), “ChangeText”
End Sub

Sub ChangeText()
    Dim rng As Range, rngFind As Range, rngValue As Range
    Dim rngStart As Range
    Dim dTime As Date
    Dim lLastRow As Long
    
    On Error Resume Next
    
    lLastRow = Sheet3.Range(”B65536″).End(xlUp).Row
    Set rng = Sheet3.Range(”B1:B” & lLastRow)
    dTime = Time
    Set rngFind = rng.Find(dTime)

    Sheet5.TextBox1.Value = rngFind.Offset(0, -1).Value
    DisplayData
End Sub

工作表中的“显示”按钮关联的子过程为“DisplayData”。

显示满足条件的所有数据(表结构、VLOOKUP函数、MATCH函数等的使用)

对于VLOOKUP函数来说,其主要缺陷是仅能返回与查找条件相匹配的单条数据,不能够返回与某条件相匹配的所有数据,但其优势是能够相当容易地获取与所给条件相匹配的第一条数据,如下图1所示。
vlookup1
图1:使用VLOOKUP函数返回包含某顾客姓名相应的行中的数据是很容易的方式
正如上图所示,在Excel 2007中使用结构化引用,VLOOKUP函数不仅容易使用,而且可读性也很强。在示例中,将表Table1中第一列的值与单元格A9中的值相匹配,并从表中第3列返回值。但是,不能返回表中第二个与“Dan”相匹配的值。事实上,很多时候我们都会碰到这样的情况,我们想要返回与条件相匹配的所有值,但是VLOOKUP函数只能返回满足条件的第一个值。
下面,让我们看看如何从表中获取满足条件的所有数据。首先,准备一些要操作的数据。我们以Office自带的Northwind示例数据库的一部分数据来演示,将其中的部分数据导入Excel表中,如下图2、图3、图4所示。
vlookup2
图2:导入到工作表Customers中的“Customer”表并命名为“tblCustomers”
vlookup3
图3:导入到工作表Orders中的“Orders”表并命名为“tblOrders”
vlookup4
图4:导入到工作表Details中的“OrderDetails”表并命名为“tblDetails”
当然,上述数据都不需要自已手工输入,只需从Northwind数据库中导入即可。现在,希望选择订单号(Order Number)后,能够显示该订单的详细信息,如下图5所示。
vlookup5
图5:当选择某订单号后,会显示该订单的详细信息
下面是图5显示的界面的主要设计过程。
1、在工作表相应的单元格中输入下列字符:
B1:Order Number
C3:Order Information
C4:Customer
F4:Order Date
F5:Status
F6:Salesperson
F7:Ship Date
C10:Order Details
C11:Product
D11:Quantity
E11:Unit Price
F11:Discount
G11:Total Price
H11:Status ID
2、创建包含所有订单IDs的一个命名区域,将使用该名称在数据有效性中创建订单号的下拉列表。为此,单击“公式——定义名称”,在“新建名称”对话框中输入:
名称:OrderIds
引用位置:=tblOrders[ID]
注:数据有效性不能够引用不同工作表中的单元格区域,除非将该区域定义名称。
3、选择单元格D1,将其命名为rngOrderId。
4、选择单元格D1,单击“数据——数据有效性”,在“允许”中选择“序列”,在“来源”框中输入“=OrderIds”。
5、选择单元格C5,输入下列函数:
=VLOOKUP(rngOrderId, tblOrders, MATCH(C4, tblOrders[#标题], 0), FALSE)
6、与单元格C5中的函数相似,设置剩余单元格的查找函数。
C6:=VLOOKUP($C$5,tblCustomers,MATCH(”Address”,tblCustomers[#标题],0), FALSE)
C7:=VLOOKUP($C$5, tblCustomers, MATCH(”City”,tblCustomers[#标题],0), FALSE) & “, ” & VLOOKUP($C$5, tblCustomers, MATCH(”State”,tblCustomers[#标题],0), FALSE) & ” ” & VLOOKUP($C$5, tblCustomers, MATCH(”Zip”,tblCustomers[#标题],0), FALSE)
H4:=VLOOKUP(rngOrderId, tblOrders, MATCH(F4, tblOrders[#标题], 0), FALSE)
H5:=VLOOKUP(rngOrderId, tblOrders, MATCH(F5, tblOrders[#标题], 0), FALSE)
H6:=VLOOKUP(rngOrderId, tblOrders, MATCH(F6, tblOrders[#标题], 0), FALSE)
H7:=VLOOKUP(rngOrderId, tblOrders, MATCH(F7, tblOrders[#标题], 0), FALSE)
至此,完成了我们的界面的上半部分,如图6所示。
vlookup6
图6:已完成的查找界面
下面,让我们来看看将要使用的公式中的一些函数。
1、实际上,我们不会使用VLOOKUP函数。因为需要返回多个项目,因此需要一种方式来返回一组值,而VLOOKUP函数不允许这样做。相反,我们使用INDEX函数返回指定行和列交叉部分的值。
2、我们需要指定想要在单元格中显示的数组中的项目,这里可使用SMALL函数和ROW函数来实现。
3、我们希望如果在源数据中添加额外的列时确保数据能够自动调整,这里使用MATCH函数。
4、最后,我们希望有错误处理功能,这里使用IFERROR函数(这是在Excel 2007中新增的函数)来确保如果在计算中有错误将只是显示空单元格。
好了,先让我们来看看已经完成的函数,如下图7中的单元格C12所示(注意,这是一个数组公式,其左右两侧的花括号不需要自已输入。在输完公式后按下Ctrl+Shift+Enter组合键即可)。
vlookup7
图7:数组公式用于返回与特定值相匹配的第N项
这个公式看起来很复杂,为便于阅读,将其书写如下:
{
=IFERROR(
INDEX(tblDetails,
 SMALL(
IF(tblDetails[Order ID]=rngOrderId,
ROW(tblDetails[Order ID])-ROW(tblDetails[#标题])
),
ROW(1:1)
),
MATCH(C$11, tblDetails[#标题], 0)
),
“”)
}
首先,看看SMALL函数,该函数接受一组值并从中返回第N小的值。
SMALL(
IF(tblDetails[Order ID]=rngOrderId,
ROW(tblDetails[Order ID])-ROW(tblDetails[#标题])
),
ROW(1:1)
),
本例中,数组的值由IF函数确定。特别地,如果Details表中某行的Order ID与在下拉列表中选择的Order ID相等,那么添加该行的行号到数组值中。通过使用ROW函数,Excel能够自动调整公式来向下填充单元格。并且,通过使用结构化引用,使得工作表数据能够自动适应源数据的变化。
然后,再看看INDEX函数,该函数接受一个二维数据并返回数组中指定行列位置的值。
INDEX(tblDetails,
 SMALL(
IF(tblDetails[Order ID]=rngOrderId,
ROW(tblDetails[Order ID])-ROW(tblDetails[#标题])
),
ROW(1:1)
),
MATCH(C$11, tblDetails[#标题], 0)
),
我们已经知道,本例中的SMALL函数返回与输入的Order ID相匹配的Order Details列表中ROW(Nth)的值,这里是第一个值即行号。接着需要获取列号,即使用MATCH函数,本例中该函数接受C11的值并查找在Details表中有相同名称的列。
最后使用的是IFERROR函数,如果包含计算式发生错误,使用空字符串(””)替换错误值。
现在,选择单元格C12,拖动其右下角的填充柄至单元格H12。选择单元格区域C12:H12,拖动填充句柄向下10行或更多。那么,现在当我们改变Order ID时,将会自动更新相关信息。
vlookup8
图8:完成的界面表,使用数组公式向下填充以获取所有相关信息

摘自Excel Team Blog,本文有删节.
示例工作簿下载:Master-Detail