使用custom field给特定文章选择特定的共享许可协议

嘛话说可能有人注意到了,虽然偶一直使用的是BY-NC-SA 2.1日本许可协议进行的共享许可授权,但是上上一篇店长的调查报告的日文翻译却是使用的和店长一样的BY 3.0 Unported许可协议,嘛之所以偶一直用2.1日本许可协议,是因为博客服务器在日本,而日本的默认许可协议的版本是2.1而不是最新的3.0,所以一直以来偶都是用的这个许可协议;但是店长的报告偶只是负责翻译,所以似乎和店长用同一个协议会更好

于是怎么解决这个问题呢?一直以来偶都是在模版里面直接添加一个include代码来显示已经编辑好了的许可协议,而从来没考虑过这个问题,这一次既然遇到了这个问题,那么在模版的代码上咱也选择修改一下代码,给需要的文章显示特定的许可协议

要达到的目的是这样的:
1、默认的文章不需要做任何追加的手续就可以直接显示默认的许可协议;
2、一些需要显示特定的许可协议的文章,在文章编辑页面使用custom field追加一小段文字,就可以显示特定的许可协议
就是这么简单

8过当然,在开始教程之前还是事先说一句:修改代码还是要有一定的基础才行,至少你得知道那个模版文件是哪个模版w

首先说说实现方法:实现的方法就是使用PHP引入外置的许可协议文件,如果没有特定的custom field(比如偶使用的是license_version),那么就引入默认许可协议文件;如果有这个特定的custom field,那么就检查这个field的value是什么,根据这个value来选择需要引入的许可协议文件

好了,接下来就开始模版的修改工作了,在修改代码之前,首先需要准备好你需要的许可协议文件,在Creative Common可以简单地通过几个选择的步骤就得到你需要的代码,拿到代码之后保存为.txt文件即可(注意文本代码要使用和自己的博客使用的文本代码相同,比如偶的博客用的是UTF-8码,所以许可协议的.txt文件也是UTF-8码)。文件名建议使用简单的而自己又能记得住的,比如偶使用的就是license_(license version).txt的文件名,默认许可协议的名字就是license_BY-NC-SA_2.1JP,而调查报告的日文翻译的文件名则是使用license_BY_3.0U,这个是为了方便自己在写custom field的时候回忆起自己想要的是哪个许可文件

保存好许可文件之后,放到博客的服务器上,路径可以选择任何路径,比如偶用的是/material/的路径里面,以方便这些外置文件的管理

接下来找到自己的主题的投稿页面的模版(比如iNove的投稿页面的模版是single.php),如果你有多个投稿页面的模版(比如不同的category使用不同的模版啥的),那么请找到所有的投稿模版

在模版里面找到<?php the_content(); ?>(把<>替换成半角),这个就是模版里面的显示文章内容的部分,如果想要在文章之后显示许可协议,那么就在这后面添加许可协议代码

许可协议代码如下:
<?php $license_version = get_post_custom_values(‘license_version’);
if (empty($license_version)) {
include(‘./material/license_BY-NC-SA_2.1JP.txt’);
} else {
foreach ( $license_version as $key => $license_version_name ) {
include(‘./material/license_’.$license_version_name.’.txt’);
}
}
?>

解释一下这个代码的意思:首先第一行,是获取特定的custom field里value并保存为$license_version,特定的custom field的名字为license_version
第二行:如果$license_version的值为空
第三行:引入默认的./material/license_BY-NC-SA_2.1JP.txt的许可文件显示
第四,第五行:如果$license_version的值不为空
第六行:抽取$license_version的key保存为$license_version_name
第七行:引入./material/license_($license_version_name).txt文件

嘛,简单来说就是这样;至于为什么非要用foreach代码,不知道是不是因为WP的Custom field的value都是保存为配列的,反正偶找到的获取custom field的值的样本代码全是用的foreach,只好用这个了ww

写完这样的代码并保存上传到服务器之后,接下来就是找到需要使用特定license的文章,编辑文章的时候在管理界面找到Custom Fields的栏目,添加一个Name为license_version(第一次需要添加,第二次之后可以直接在下拉菜单找到这个Name)的field,在右边的Value写下这个license的名字(BY_3.0U),确定添加然后保存即可,这样下来之后平常的文章都可以不用在意这个设置,等到需要的时候再设定一下这个license_version的field即可;当然因为是直接引入value为文件名,所以如果需要,可以设置很多个版本的license在需要的时候引入

8过说起来,好像其实有比include更好的方式?嘛不是很清楚,8过这个方法有一个很大的缺点就是了:如果license_version的value填写了一个错误的不存在的文件名,那么在文章的后面就不会显示任何license,解决的办法是再在foreach的loop里面添加一个if then系列的句型,给每一个value设置绑定一个特定的license,最后再添加一个else,导入默认许可协议,8过这样做的几个缺点,一个是会加大代码量(偶个人嫌麻烦w),另一个就是每想起需要用一个新的许可协议,都得再去修改模版文件添加绑定,所以偶虽然其实本来是想这么做的,后来想一想还是放弃了w

另外当然,如果担心以后找不到这一串代码的话,还可以在代码的前后使用<!– (注释) –>的代码www

以上

Author: 星野恵瑠

Mac user, Niji-Ota, Chinese, Now working in Japan at MAGES. Inc., Future's aim is that one day my name can be listed in Wikipedia

9 thoughts on “使用custom field给特定文章选择特定的共享许可协议”

  1. 就算加了協議,也同樣擁有lovee醬的使用權 (^^)
    原來小生用的協議是3.0版本的啊,以前沒有太注意

  2. 技术文。。。不过呢,这种毕竟是第三方系统,改代码神马的还是需要小心的 =w= 嘛,我知道秀吉同学是木有问题啦。。。
    如果是自己做的系统的话,就可以很容易的加入这个功能了还可以更灵活233,不过这是“如果”是自己开发的博客系统……要知道博客系统开发可不是一个月能搞定的……(像WP这样完善的条件下)
    嘛。。不知道在扯什么了……

Leave a Reply to 八方SEO Cancel reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

(;;) (:D) (!!!!) (……) (^o^;) (==) (OoO) (=v=o) more »Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).