Aug032016

WordPress 自定义字段插件

作者: 主机迷 分类: WordPress

Advanced Custom Fields

下载地址:https://wordpress.org/plugins/advanced-custom-fields
安装启用后,在后台左边新增了一个菜单叫字段。
基本情况:

  1. 新建一个字段组,组里面新建1到 n 个字段,然后将字段组关联到POST上(这里的关联规则相当丰富)
  2. “选项”的“样式”设置有“无MetaBox”和“标准MetaBox”,没搞明白区别
  3. 修改文章时在文章编辑框下方就可以看到自定义的字段了,不需要输入字段名,这个比默认的自定义字段省事。
  4. 保存后数据会存放到wp_postmeta表,并没有在wp_posts表中新增字段
  5. 一篇文章的一个字段在wp_postmeta表中会对应两条记录,而且 key为中文,这个不太友好
  6. 使用后新建的字段会出现在 默认自定义字段的下拉列表里,而且一个字段在下拉列表里出现两项,一项是唯一 ID,另外一项是中文名,这就更不友好了,不光如此,发现还带来了position、layout、hide_on_screen、rule等字段。发现自定义字段的下拉列表的显示逻辑是wp_postmeta不以下划线开头的所有meta_key

select distinct meta_key from wp_postmeta t where t.meta_key not like '\_%' //下划线要转码

  1. Advanced Custom Fields是这样保存字段组基本信息的,在文章表中建立一条标题为字段组名字、内容为空的记录,该字段组的详细配置数据存放在wp_postmeta表,通过post_id关联。

参考:http://www.wpdaxue.com/advanced-custom-fields.html

Simple Fields

下载地址:https://wordpress.org/plugins/simple-fields/
安装启用后,设置菜单在后台的设置-Simple Fields
同样,保存后文章的数据会存放到wp_postmeta表,并没有在wp_posts表中新增字段。
基本情况:

  1. 新增字段组,增加字段。字段的基本属性就填两项就可以了,一个是 name,可以填中文,这个是在编辑文章时显示的字段名;另外一个是 slug,这个是前台获取该字段的值是使用的,这个 slug 名字可以随意修改(当然前台取值时要跟着修改),因为文章的字段在wp_postmeta表是以_simple_fields_fieldGroupID_1_fieldID_2_numInSet_0这样的方式命名的。
  2. 需要新建一个关联器,同时还需要设置文章的默认关联器才能生效。这个Simple Fields的关联规则不如Advanced Custom Fields强大,Simple Fields只能对Posts、Pages、Media这3种类型进行设置。
  3. 使用Simple Fields创建的字段不会出现在自带自定义字段的下拉列表里,这个地方要比Advanced Custom Fields
  4. 假定使用插件自定义的字段数量为 n,目测使用wp_postmeta后文章在wp_postmeta表中的自定义数据的字段个数是 n+3;而Advanced Custom Fields是 2n
  5. Simple Fields的自定义字段的值允许为空
  6. 修改某篇文章的自定义字段时,Simple Fields的处理逻辑是先全部删除再全部重建
  7. 在前台取值的用法

    // To get values from a field simple use the function simple_fields_value() like this:
    $field_value = simple_fields_value("slug_of_field");
    // You can even pass meny slugs to retrieve array of values:
    $field_value = simple_fields_value("slug_of_field1, another_slug, and_a_third_slug");

  8. 弊端:不像自带的自定义字段,不管填不填写,这个每篇文章都会在wp_postmeta表增加数据,如果文章多,会造成wp_postmeta表迅速膨胀。

参考:
http://simple-fields.com/documentation/getting-started/tutorial/

Smart Custom Fields

下载地址:https://srd.wordpress.org/plugins/smart-custom-fields/

  1. 创建的字段组必选关联文章类型例如POST才能生效,在右下角勾选文章类型
  2. 字段组配置信息的保存方式和Advanced Custom Fields类似,都是在 wp_posts 文章表中建立一条标题为字段组名字、内容为空的记录,该字段组的详细配置数据存放在wp_postmeta表,通过post_id关联
  3. 会导致 wp 默认自定义字段的下拉列表中出现smart-cf-setting、smart-cf-condition-post-ids、smart-cf-condition等字段
  4. 文章自定义字段wp_postmeta表中的 key 是按字段的实际名字保存的,因此字段名字不能像Simple Fields那样可以随意修改

参考:
https://www.imd-net.com/blog/2014/12/15-210937/

综合结论

Simple Fields不会污染 WordPress 自带自定义字段下拉菜单,且在 wp_postmeta 表的数据比Advanced Custom Fields少一半,还可以随意修改字段名字而不会影响已有数据,另外考虑到Simple Fields对我来说功能够用,暂时不需要Advanced Custom Fields那么强大的自定义功能,Smart Custom Fields既没有Advanced Custom Fields功能强大,又不具备Simple Fields的优点,因此Simple Fields是我的首选。

Aug012016

在 Mac 搭建 WordPress 开发环境遇到的几个问题

作者: 主机迷 分类: WordPress

既没有使用 MAMP,也没有安装 XAMPP,Apache是单独安装的,MySQL 部署在 Mac 的虚拟机里。对了,Mac 版本有点老,还是10.7.5。

安装完成后访问首页,报错:

Error establishing a database connection

确认并非wp-config.php设置错误,且MySQL是正常运行的。将wp-config.php的define(‘WP_DEBUG’, false)改为define(‘WP_DEBUG’, true)也没有打印更多信息,/var/log/apache2/error_log也没有输出错误信息。

检查数据,发现所有的表里数据都是空的。于是把线上的数据导入到开发环境的 MySQL,再次访问首页,竟然一片空白,什么错都不报了。推测是数据问题,毕竟线上数据的环境与本地不一样。最大的可能是模板了,线上使用的模板没有放到 Mac 本地目录。

在推测的同时做测试,在template-loader.php$template的值输出,结果为空,进一步印证了是模板的问题。

于是拷贝模板到本地,访问首页出现警告:

Notice: get_bloginfo was called with an argument that is deprecated
since version 2.2! The siteurl option is deprecated for the family of bloginfo() functions.

暂时不知道怎么解决,决定先切换模板为自带的模板,执行以下的 sql:

update wp_options  set option_value = 'twentysixteen'  where 
option_value ='yourtemplate' and option_name in('template','stylesheet'); 
//执行时yourtemplate要改为实际模板名

再次访问首页,发现跳转到线上网址去了,于是又修改数据,将 wp_options表的选型 siteurl 和 home 的值都改为http://127.0.0.1,这次终于能成功看到首页了。

当然,还需要配置 .htaccess,否则访问除了首页的其他页面会报404错误。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

遗留问题:
没有弄明白为什么在 Mac 安装 WordPress 时只生成了表没有生成数据。

后记:
Notice: get_bloginfo was called with an argument that is deprecated since version 2.2的问题,将wp-config.php的define(‘WP_DEBUG’, true)改回为define(‘WP_DEBUG’, false)就解决了


主机迷 is powered by Typecho