基于wordpress的csm系统(数据迁移)

为什么选择WordPress?

  • WordPress自从2005年发布以来,它不断地被改良和更新。WordPress已经是一个成熟的网站建立工具。
  • WordPress用非常多的免费插件
  • (Plugins)和主题(Themes),安装使用都非常的简单方便。你不需要专业网站设计知识,也不用知道如何使用代码之类的。你可以简单地搭建一个美观和功能强大的网站。例如,你需要一个论坛,你只需要安装一个插件(如,bbPress)就可以了。
  • WordPress可以用来做任何的网站。你想得到的功能基本都可以简单地添加。

wordpress的基本原理:

WordPress是一个单入口的文件,所有的前端处理都必须经过index.php,这是通过修改web服务器的rewrite规则来实现的。这种做法的好处是显而易见的,这样URL更好看,不必为每一个url新建一个文件。
在这里插入图片描述
需求:多级目录多站点结构实现用户角色的管理,历史数据的迁移。
选型:选择多级多站点,利用lb将 域名/path部署wordpress,可以实现项目单一化管理,并且模板头中调的接口不会有跨域问题。

多站点目录结构

1.站点1 http://xx.com/announcement/announcement_zh
2.站点2 http://xx.com/announcement/announcement_en
注意:wordpress实现子目录多级站点方式需要修改源码(这里不采用,采用LB方式或者反向代理的方式)
反向代理nginx配置:
实现多级目录多站点的nginx配置:
#ignored: “-” thing used or unknown variable in regex/rew
rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
if (-f $request_filename){
set $rule_2 1;
}
if (-d $request_filename){
set $rule_2 1;
}
if ( $rule_2 = “1”){
#ignored: “-” thing used or unknown variable in regex/rew
}
rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes|login).) /announcement/$2 last;
rewrite ^/([_0-9a-zA-Z-]+/)?(.
.(php|html)) $ /announcement/$2 last;
rewrite /. /index.php last;

反向代理的配置
location /announcement/ {
proxy_pass http://192.168.1.3:38081;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
#proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect default;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
}

这样可以使wordpress公告管理系统独立于原来的项目。

WordPress中函数钩子hook的作用及基本用法

WordPress 的插件机制实际上指的就是这个 Hook 了,它中文被翻译成钩子,允许你参与 WordPress 核心的运行,是一个非常棒的东西,下面我们来详细了解一下它。

钩子分类

钩子分为两种,一种叫做动作(action),还有一种叫做过滤器(filter)。这两种钩子实现原理基本一样,后边会讲到,使用上的区别在于过滤器有返回值,而动作没有。

动作的理念是让你在一种情况或者一个特别的位置执行一些函数,比如发送一封邮件等;过滤器则是让你修改 WordPress 核心需要用到的一个值,然后 WordPress 再用这些值做一些事情,比如函数的返回值等。

  1. 动作钩子

wp_head 是一个很常用的动作钩子,在开发主题过程中,开发者都会在 head 标签里加上 wp_head() 函数,事实上,正是这个函数调用了 wp_head 钩子。

如果插件开发者想要在 head 标签里添加一句话,就可以使用 wp_head 钩子,下边是个简单的例子。 //在 head 标签添加一些内容

`function Bing_add_head_tag()
{  
 echo '添加内容';
  } 
  add_action( 'wp_head', 'Bing_add_head_tag' );

添加代码后,查看前台的网页源代码,就能在 head 标签里看到我们添加的内容了

2.过滤器钩子

过滤器钩子可以让你改一些东西的值,过滤器回调函数会接受一个参数,这就是当前的值。还记得那个用来调用文章内容的 the_content() 函数吧,这个函数就提供了一个 the_content 过滤器。

给 the_content 钩子添加一个函数,这个函数需要接收一个参数,这个参数就是当前的值。

//文章内容全部链接新窗口打开
function Bing_autoblank( $content ){//$content 变量就是文章内容,因为其它过滤器也要过滤,所以这个内容可能是经过其它函数过滤的
  $content = str_replace( '<a', '<a target="_blank"', $content );//添加 target="_blank"
  return $content;//必须要把过滤后的内容返回回去,否则值就丢了
}
add_filter( 'the_content', 'Bing_autoblank' );

应用:1.摘要的截取。2.标签的处理。

钩子原理

事实上,在调用 add_action() 和 add_filter() 的时候,只是向 $wp_filter 全局变量添加了一个数组元素,还要说的就是动作和过滤器是公用的一个全局变量,也就是说,过滤器和动作是不能重名的。

当调用 do_action() 的时候,会查找 $wp_filter 全局变量中都有哪些添加到此动作的函数,循环执行即可。

apply_filters() 比 do_action() 多了一个步奏,就是每次调用函数时还要接收这个函数的返回值,最后把经过多次过滤的值返回出去,供使用。

获取当前钩子列表
WordPress 的动作和过滤器是插件机制的核心部分,允许你在特定的地方主动添加自己需要执行的动作,一般使用 add_action() 和 add_filter() 函数挂载函数。

自定义主题wordpress

每个主题至少要有这两个文件 – style.css 和 index.php。

index.php 告诉主题中所有的元素如何布局;

style.css 则告诉主题中所有的元素该如何展示,以及它们的样式。

几个名词:

Template(模板)

其实就是一个代码集,主题中很多地方会利用到这个代码集,所以把它们整合成一个模板,这样就就不必一遍遍输入这些重复代码。

Template file(模板文件)

一个包含一个或者多个代码集(模板)文件。每个主题是由多个模板文件组成的,比如:index.php,style.css,sidebar.php 等等。

Theme(主题)或者 WordPress theme(WordPress 主题)

所有你正在使用的文件:文本,图像,代码等等。注意: WordPress theme(主题)和 WordPress template(s)(模板)是两个不同的东西,尽管有些人认为他们一样。

Post(日志或者文章)

它是你 blog 的一个简单的条目,如:一个页面或者一篇日记。

Page(静态页面)

一种特殊的 post,它不是以分类组织的。它有别于你其他的日志。注意:在 WordPress,page(页面)和 Page(静态页面)是两种不同的东西。

一个完整的主题含有的文件列表:

style.css

index.php

home.php

single.php

page.php

archive.php

category.php

search.php

404.php

comments.php

comments-popup.php

author.php

date.php

下图就是 WordPress 的层次结构,它简单的向你展示,一旦你主题中的某个文件丢失了,WordPress 主题系统将会使用其他什么模板文件来代替。
在这里插入图片描述

我们可以通过上面这张图中模板文件所处的位置来知道各个主题文件的重要性,越靠左越重要。

WordPress 利用这个层次结构去寻找相应的模板文件显示页面,并且在相应的文件丢失之后如何处理。

比如 archive.php 模板文件(用来显示存档页面)丢失了,那么 WordPress 将会使用 index.php 来控制存档页面如何显示。

比如 single.php 模板文件丢失了,它会寻找 index.php。

WordPress 博客的每个页面是由多个模板文件组成的:

首页页面:
在这里插入图片描述

在上图中,我们可以看出主题的 index.php 是由 4 个模板文件组成:header.php,index.php,sidebar.php 和 footer.php。

单一日志页面:
在这里插入图片描述

这时候页面将会包含这四个模板文件:header.php,single.php,sidebar.php 和 footer。

Header 模板文件

通常在这个文件中包含博客的标题(title)和描述(description)。而且它们通常在整个博客中都是一样的。

Index 模板文件:

这个模板文件包含你的日志的标题,日志的内容(就是每篇日志的文本和图片)和日志的元数据(元数据是每篇日志的额外信息,如作者是谁,日志发布的时间,在哪个分类下,有多少留言等等)。

Sidebar 模板文件

这个模板文件主要用于控制博客的页面列表,类别列表,存档列表,友情链接列表和其他一些列表。

Footer 模板文件:

像 header.php 模板文件一样,footer.php 通常不会因为页面的改变而改变,你可以在这里放置任何东西,但是通常是版权信息。

数据表格的字段作用

wp_commentmeta:存储评论的元数据
wp_comments:存储评论
wp_links:存储友情链接(Blogroll)
wp_options:存储WordPress系统选项和插件、主题配置
wp_postmeta:存储文章(包括页面、上传文件、修订)的元数据
wp_posts:存储文章(包括页面、上传文件、修订)
wp_terms:存储每个目录、标签
wp_term_relationships:存储每个文章、链接和对应分类的关系
wp_term_taxonomy:存储每个目录、标签所对应的分类
wp_usermeta:存储用户的元数据
wp_users:存储用户

在WordPress的数据库结构中,存储系统选项和插件配置的wp_options表是比较独立的结构,在后文中会提到,它采用了key-value模式存储,这样做的好处是易于拓展,各个插件都可以轻松地在这里存储自己的配置。

post,comment,user 则是三个基本表加上拓展表的组合。以wp_users为例,wp_users已经存储了每个用户会用到的基本信息,比如 login_name、display_name、 password、email等常用信息,但如果我们还要存储一些不常用的数据,最好的做法不是去在表后加上一列,去破坏默认的表结构,而是将数据存在wp_usermeta中。wp_usermeta这个拓展表和wp_options表有类似的结构,我们可以在这里存储每个用户的QQ号码、手机号码、登录WordPress后台的主题选项等等。

比较难以理解的是term,即wp_terms、wp_term_relationships、wp_term_taxonomy。在WordPress的系统里,我们常见的分类有文章的分类、链接的分类,实际上还有TAG,它也是一种特殊的分类方式,我们甚至还可以创建自己的分类方法。WordPress将所有的分类及分类方法、对应结构都记录在这三个表中。

插件的使用

  • 场景1:大量访问网站的数据时,wordpress是基于php动态生成的网页,网站基本是打不开的
  • 场景2.1:wordpress中的封面是作为文章内容存进去的,无法直接取出,需要增加一个字段。
  • 场景2.2:原来的公告中有特殊的分类图文分类,并且每个分类要求按照特定顺序排列。
  • 场景3:编辑器界面不友好
  • 场景4:置顶到期时间功能

-方案:1.对应流量不大的场景不需要静态化,利用缓存区可以解决这个问题,插件:wp-super-cache。2.需要在文章,分类中增加。封面链接,分类排序,是否图文分类的选项。插件:advanced-custom-fields。3.这里推荐插件:classic-editor编辑器。4.使用expire-sticky-posts插件。
注意事项:定时发布和置顶过期都需要wordpress中自带的定时功能。为了直观的看定时任务是否工作可以使用插件wp-crontrol。时区也要与国内时间保持一致,在wordpress后台的 设置->常规->时区 中设置为UTC+8。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值