使用单独的定制表(不是POST)来处理文件上传数据

时间:2013-03-01 作者:user28216

The Problem:每个帖子有100多张照片的网站。可能会在几年内将posts表扩大到10万个条目以上。

The Dilemma:更愿意使用内置的“添加媒体”上传器使用默认的WP UI来处理图像/文件。如果可能的话,我希望避免使用单独的文件库实现。

The Question: 是否有人找到了将数据保存从posts\\U表转移到您自己的自定义表以存储文件数据的方法?(无需破解核心文件)

5 个回复
SO网友:Chief Alchemist

也许有一种可管理的方法可以将图像从作为附件(又名post)存储到保持在父post级别的数组中。我认为这将取决于你需要多少操作图像,删除它们,等等。

换一张桌子可能会有帮助,但在我看来,你可能是在抢彼得的钱来补偿保罗。当然,较大的表会造成伤害,但如果这些行位于其他地方,并且您仍然需要连接等,那么可以节省多少?我想你可能需要在盒子外面多拿一点来敲开这个螺母。

SO网友:ceruleus

您可以在服务器上的phpMyAdmin中手动创建一个新表(显然您的站点不会经常移动到新服务器),当然,您也可以通过主题安装或类似的方式来钩住表的创建。Wordpress使用对象/类$wpdb 用于在Wordpress数据库中实现任何查询。在这里,您可以看到如何在WP数据库中执行任何查询。所以,我会用这样的方法:

<?php
global $wpdb; // Object must be globalized.

$wpdb->query("
CREATE TABLE IF NOT EXISTS ".$wpdb->prefix."new_table (
    id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    post_id bigint(20) NOT NULL,
    image_url varchar(250) NOT NULL,
    PRIMARY KEY (id),
    KEY post_id (post_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ");
?>
您可以将其放在函数中,并将其挂接到例如theme\\u init或类似的内容。根据您的首选项更改字段。另一种方法是使用dbDelta()函数,它有一些特定的规则,因此我看不出使用它的正确原因(可能有一些,我错了)-您可以找到所有关于它的信息here (由于rep的原因,我无法添加更多永久链接,抱歉:D)

创建表后,您可以按任何方式对其进行操作—您可以将该附件挂接到新表中。您还可以挂接一些函数,以防止将附件放入posts表中。由于列数较少(例如Posteta表),我想它很轻量级,因此在处理这些图像时必须有一些性能改进。

SO网友:Terry Kernan

我想如果您真的想将信息存储在另一个表中,您可以这样做,但问题是要立即管理这些信息,添加post id这样的详细信息很容易,因为这是全局post对象的一部分,但图像url(对于刚上传的文件)不是。

问题是,要通过内置wordpress ui将媒体上传到自己的表中,必须使用媒体上传器上传,该上传器在posts表中创建“附件”类型的行,这违背了最初的目标。

要在删除帖子时从其他表中删除行,可以执行以下操作:

add_action(\'admin_init\', \'codex_init\');
function codex_init() {
if (current_user_can(\'delete_posts\')):
    // todo: remove records when posts are removed
    add_action(\'delete_post\', \'post_sync\', 10);
endif;
}

function post_sync($pid) {
    global $wpdb;
    // no need to check, just delete and watch our for number of records deleted
    return $wpdb->query($wpdb->prepare(\'DELETE FROM custom_table_name WHERE post_id = %d\', $pid));
 }
您可以在此处获得有关挂钩的更多信息:http://codex.wordpress.org/Plugin_API/Action_Reference/

SO网友:Terry Kernan

你能试试使用插件吗?我使用了wp类型中的类型。com,它可以处理图像,它可以将所有信息存储为元数据,它还允许您管理UI中的所有内容:

http://wp-types.com/home/types-manage-post-types-taxonomy-and-custom-fields/

作为额外的好处,所有图像都会显示在主UI屏幕上,而不是隐藏在“添加媒体”按钮后面,这有时会让我遇到的用户感到困惑。它还将创建所有不同的缩略图大小。通过将所有文件数据保留为post元数据,这意味着当图像被删除时,元数据也会被删除,从而保持数据库整洁。

SO网友:Vikram

您提到不想使用单独的库,但这是正确的方法。选择一个图库一个插件,它为您提供了通过快捷码或自定义字段将文章附加到图库的工具,这样您就可以完全控制文章和图库。您还可以使用高级自定义字段插件(启用了转发器字段)在帖子的自定义字段面板中创建图库。

结束

相关推荐

如何为WP-Gallery添加自定义缩略图大小

我正在使用“Lightbox Plus”插件在缩略图厨房的顶部创建Lightbox图像覆盖。现在我的问题是如何设置缩略图的大小而不影响lightbox图像的覆盖。我的意思是,当我试图通过wp Gallery edit选项为缩略图设置比例时,它甚至会将大小应用到覆盖图上(我希望覆盖图的大小尽可能大,但此功能会使它们像缩略图大小一样小),我也会在codex中看到这行代码: `get_the_post_thumbnail($id, array(100,100) ); // Other resolutions`&