如果我想为我的插件保存设置,那么这是非常简单和直接的。
现在我想再保存一点到数据库。
一个文件名和3个仅适用于该文件的其他值。有很多文件都有这些值。是否可以使用内置数据库方法保存子阵列类型?如何删除和排序它们等?
如果我想为我的插件保存设置,那么这是非常简单和直接的。
现在我想再保存一点到数据库。
一个文件名和3个仅适用于该文件的其他值。有很多文件都有这些值。是否可以使用内置数据库方法保存子阵列类型?如何删除和排序它们等?
我很少不同意其他知识渊博的用户,但在这种情况下,我无能为力。在我看来,将非核心数据库表的使用称为糟糕的做法本身是完全错误的。
选择是使用核心表还是添加自己的表取决于几个因素。
查询的执行时间取决于表的大小。因此,如果您计划存储大量数据,那么仅针对这一类特定数据集的单独表将不可避免地是更有效的解决方案。
如果您在这些特定数据集旁边存储了大量常规帖子或CPT,wp_posts
以及wp_postmeta
可以快速增长。
对我来说,这种选择最终取决于数据的“posty”程度。它应该支持作者、评论、修订、摘录等吗?如果是这样,我将使用CPT和/或核心功能。如果没有,为了资源利用率和效率,我将使用单独的表。
如果Eugene的想法是正确的,那么现有的编写良好的插件都不会添加自己的表,幸运的是事实并非如此。
$wpdb
class.wp_options
, 通过迫使插件开发人员仔细考虑正在创建/存储的数据类型,它是CPT吗?这是分类法吗?是post meta吗$wpdb
班请注意本法典条目列表中的信息/注意事项:因此,我们可以得出以下结论:
在核心WP表中存储数据(设置或用户生成)是最佳实践,有创建自定义DB表的有效用例;因此,创建自定义DB表不能被视为一种固有的不良做法。在创建自定义DB表时,WordPress提供了最佳实践实施
如果你的数据比WordPress post模型更复杂,那么非核心数据库表是必须的,它将是巨大的,并且有很多元细节需要搜索。
WordPress用于post meta的EAV格式不适合多标准搜索。
如果您将元划分为多个条目,那么post meta表中的每个帖子都会有许多条目,通过元搜索任何帖子都会慢得多。
如果您将所有序列化的元存储在一个数组中,并将其作为post meta中的一个条目,那么这次您将被迫只在该元内进行文本搜索,并且您将无法在sql查询中直接使用比较运算符。
如果你的插件没有数千个条目和相关的元数据,这不是一个大问题。
但是,如果你的插件要做任何大的事情,这是一个大问题。
根据您的情况,作为独立条目的文件名和附加到该条目的3个元数据条目似乎并没有那么大。您可以使用wordpress post table和meta table。
但是,如果人们要经常搜索这3个meta,尤其是结合使用,那么我建议您设置单独的表。
使用这种格式,只需一个表和一个条目,也可以包含所有元,并且可以快速查询。
顺便说一句,如果您使用WordPress表,并且您也在使用查询缓存,那么用户对您的数据的搜索将随着时间的推移而被缓存,并且产生的负载会更少。但这并不像做单独的表格那样谨慎。
您可以将文件上载到媒体库。媒体库中的每个项目都存储在其中wp_posts
桌子这意味着每个文件都可以有元数据。您可以根据需要为中的每个文件保存尽可能多的信息wp_postmeta
表(按使用)Metadata API.
为插件创建自己的表是一种不好的做法吗?
是的,如果您可以使用核心功能,那么创建自己的表是不好的做法。
class TMM {
public static $options;
public static function register() {
self::$options = get_option(TMM_THEME_PREFIX . \'theme_options\');
}
public static function get_option($option) {
return @self::$options[$option];
}
public static function update_option($option, $data) {
self::$options[$option] = $data;
update_option($prefix . \'theme_options\', self::$options);
}
//ajax
public static function change_options() {
$action_type = $_REQUEST[\'type\'];
$data = array();
parse_str($_REQUEST[\'values\'], $data);
$data = self::db_quotes_shield($data);
if (!empty($data)) {
foreach ($data as $option => $newvalue) {
if (is_array($newvalue)) {
self::update_option($option, $newvalue);
} else {
$newvalue = stripcslashes($newvalue);
$newvalue = str_replace(\'\\"\', \'"\', $newvalue);
$newvalue = str_replace("\\\'", "\'", $newvalue);
self::update_option($option, $newvalue);
}
}
}
_e(\'Options have been updated.\', TMM_THEME_FOLDER_NAME);
exit;
}
public static function db_quotes_shield($data) {
if (is_array($data)) {
foreach ($data as $key => $value) {
if (is_array($value)) {
$data[$key] = self::db_quotes_shield($value);
} else {
$value = stripslashes($value);
$value = str_replace(\'\\"\', \'"\', $value);
$value = str_replace("\\\'", "\'", $value);
$data[$key] = $value;
}
}
}
return $data;
}
}
类的名称是原始名称,请根据需要重命名和add for ajax:add\\u action(\'wp\\u ajax\\u change\\u options\',array(\'TMM\',\'change\\u options\')当我为一些bug编写修复程序时,我通常会增加版本并将其发送给bug查找程序,以查看我的修复程序是否有效。如果我有1.2.5 我想创建一个测试版,一旦我提交代码,它将变得多余,我应该使用1.2.5-beta 或1.2.6-beta? 我担心的是1.2.6 <;1.2.6-beta 因此,字符串比较可能有利于beta版,而bug查找程序不会收到发布稳定版本的通知。编辑:如果在不考虑发布类型的情况下对字符串进行绝对比较,则可以使用1.2.5-fix 然后1.2.6. 该问题也概述在http://en.wik