Sử dụng bảng tùy chỉnh riêng (không phải bài đăng) để xử lý dữ liệu tải lên tệp


7

Vấn đề: Trang web có hơn 100 ảnh mỗi bài. Có thể có thể sưng bảng bài viết vượt quá 100 nghìn mục trong vòng một vài năm.

Dilemma: Thay vào đó sẽ dính vào UI WP mặc định để xử lý ảnh / tệp với Trình tải lên "Thêm phương tiện" tích hợp. Tôi muốn tránh sử dụng triển khai Thư viện tệp riêng nếu có thể.

Câu hỏi: Có ai tìm được cách chuyển hướng lưu dữ liệu khỏi post_table và vào bảng tùy chỉnh của riêng bạn để lưu trữ dữ liệu tệp không? (không phải hack các tập tin cốt lõi)


5
Thay vì thay đổi post_table, tại sao không sử dụng cái gì đó như wordpress.org/extend/plugins/hyperdb để phân chia các bảng giữa các cơ sở dữ liệu / máy chủ?
Pontus Abrahamsson

1
Bạn có thể giải thích chính xác mối quan tâm của bạn (hiệu suất là gì) và làm thế nào để có thêm bảng giải quyết nó? WP được biết là xử lý số lượng bài viết rất lớn (tất nhiên là có đủ phần cứng).
Rarst

Cảm ơn bạn Pontus - HyperDB dường như có thể vượt qua đầu tôi vào thời điểm này. Tôi đang nhìn vào nó mặc dù.
dùng28216

Rarst - Tôi không phải là DBA, nhưng từ các diễn đàn nghiên cứu, mọi người dường như thấy sự chậm lại ở khoảng 50K mục post_table; và ngoài việc chia tách các bảng, tôi chưa thấy một bản sửa lỗi nào cho nó. Việc chậm lại dường như xảy ra đặc biệt, trong AdminPanel và trong chế độ xem danh sách wp_query tùy chỉnh của Taxonomy / Category & Custom. Trang web sẽ phụ thuộc rất nhiều vào chế độ xem truy vấn Thuế / Mèo / Tùy chỉnh, đây là điều tôi quan tâm nhất. Tôi không chắc tại sao WP không tách ra một bảng "tải lên" riêng biệt, để bảng bài viết sẽ không trở nên quá nhanh. Có vẻ như một vấn đề thiết kế di sản sẽ cần sửa chữa sớm.
dùng28216

Rarst - Ngoài ra, quên đề cập đến trong các truy vấn "Tìm kiếm", trong đó tìm kiếm% từ khóa% bảng đầy đủ, một bảng lớn có thể làm chậm đáng kể. Tôi có thể thấy trang web có 5.000 bài đăng trong vòng 2 năm. Với 100 ảnh trên mỗi bài đăng, đó là 500.000 mục post_table. Vì vậy, MySQL hiện phải trải qua 500 nghìn mục nhập cho tìm kiếm, so với chỉ 5K mục (chúng đã tách các Tải lên thành một bảng riêng biệt). Một lần nữa, tôi không phải là DBA, nhưng điều đó phải làm chậm đáng kể việc tìm kiếm.
dùng28216

Câu trả lời:


1

Có lẽ có một cách có thể quản lý để chuyển hình ảnh từ lưu trữ dưới dạng tệp đính kèm (còn gọi là bài đăng) sang được lưu trữ trong một mảng được giữ ở cấp độ bài đăng gốc. Tôi nghĩ rằng nó sẽ phụ thuộc vào mức độ bạn cần thao tác với hình ảnh, xóa chúng, v.v.

Chuyển sang một bảng khác có thể giúp ích nhưng dường như với tôi bạn có thể đang cướp Peter để trả Paul. Chắc chắn các bảng lớn hơn bị tổn thương nhưng nếu các hàng đó ở một nơi khác và bạn vẫn cần tham gia, v.v ... sẽ tiết kiệm được bao nhiêu? Tôi nghĩ rằng bạn có thể phải có thêm một chút bên ngoài hộp để phá vỡ hạt này.


"Thay đổi hình ảnh" thực sự là hy vọng của tôi. Tuy nhiên, có 3 hành động trong vòng đời của một tệp: 1. Tải lên Phương tiện. 2. Chỉnh sửa phương tiện truyền thông. 3 Xóa bài viết (xóa tất cả các phương tiện truyền thông). Tôi sẽ cần các móc trong cả 3 hành động đó và tôi không thể tìm thấy bất kỳ móc nào giúp tôi thực hiện tất cả 3.
user28216

0

Bạn có thể tự tạo một bảng mới trong phpMyAdmin trên máy chủ (rõ ràng là trang web của bạn mà bạn sẽ không di chuyển thường xuyên đến một máy chủ mới) hoặc, tất nhiên, bạn có thể nối việc tạo bảng với cài đặt chủ đề hoặc tương tự. Wordpress sử dụng đối tượng / lớp $ wpdb để đạt được bất kỳ truy vấn nào trong cơ sở dữ liệu Wordpress. Ở đó bạn có thể thấy cách thực hiện bất kỳ truy vấn nào trong cơ sở dữ liệu WP. Vì vậy, tôi sẽ sử dụng một cái gì đó như thế này:

<?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 ");
?>

Bạn có thể đặt nó trong một hàm và móc nó vào theme_init chẳng hạn hoặc một cái gì đó tương tự. Thay đổi các lĩnh vực theo sở thích của bạn. Một cách khác là sử dụng hàm dbDelta (), có một số quy tắc cụ thể và do đó tôi không thấy lý do chính đáng của việc sử dụng nó (có thể có một số và tôi đã sai) - bạn có thể tìm thấy tất cả về nó ở đây (tôi không thể đặt thêm permalinks vì đại diện, xin lỗi: D)

Sau khi tạo bảng, bạn có thể thao tác với bảng theo bất kỳ cách nào bạn muốn - bạn có thể móc đăng ký tệp đính kèm đó vào bảng mới. Bạn cũng có thể móc một số chức năng sẽ ngăn việc đưa tệp đính kèm vào bảng bài viết. Do số lượng cột ít (ví dụ như bảng postmeta), tôi đoán nó rất nhẹ và do đó phải có một số cải tiến về hiệu suất khi thao tác với hình ảnh đó.


dbDelta()nhiệm vụ đó.
kaiser

0

Tôi cho rằng nếu bạn thực sự muốn lưu trữ thông tin trong một bảng khác, bạn có thể làm được, nhưng vấn đề là quản lý nó ra khỏi hộp, thêm các chi tiết như id bài đăng là dễ dàng vì đó là một phần của đối tượng bài đăng toàn cầu, nhưng url hình ảnh (đối với một tệp vừa được tải lên) thì không.

vấn đề là, để đưa phương tiện vào một bảng của riêng nó thông qua wordpress tích hợp là nó sẽ phải được tải lên bằng trình tải lên phương tiện tạo ra các hàng trong bảng bài đăng dưới dạng các loại 'tệp đính kèm', đánh bại mục tiêu ban đầu .

để xóa hàng khỏi các bảng khác khi bài đăng bị xóa, bạn có thể làm một cái gì đó như thế này:

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));
 }

Bạn sẽ có thể nhận thêm thông tin về các móc ở đây: http://codex.wordpress.org/Plugin_API/Action_Reference/


-1

Bạn có thể thử sử dụng một plugin? Tôi đã sử dụng các loại từ wp-types.com và nó hoạt động đối xử với hình ảnh, nó hoạt động bằng cách lưu trữ tất cả thông tin dưới dạng dữ liệu meta, nó cũng cho phép bạn quản lý mọi thứ từ UI:

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

như một phần thưởng bổ sung, tất cả các hình ảnh sau đó được hiển thị trên màn hình UI chính trái ngược với ẩn đằng sau nút thêm phương tiện, điều này đôi khi khiến người dùng nhầm lẫn với tôi. Nó sẽ tạo ra tất cả các kích thước hình thu nhỏ khác nhau quá. bằng cách giữ tất cả dữ liệu tệp dưới dạng dữ liệu bài đăng, điều đó có nghĩa là khi hình ảnh bị xóa, meta cũng bị xóa, giữ cho db gọn gàng.


1
Câu hỏi là về một bảng riêng biệt . Plugin bạn khuyên không nên làm điều đó.
fuxia

Trên thực tế, plugin lưu trữ nó trong bảng wp_postmeta, tách biệt với bảng wp_posts :)
Terry Kernan

-1

Bạn đã đề cập rằng bạn không muốn sử dụng bộ sưu tập riêng biệt, nhưng đó là phương pháp thích hợp để hoàn thành nó. chọn một thư viện một plugin cung cấp cho bạn phương tiện để đính kèm nó với một bài đăng bằng shortcode hoặc theo trường tùy chỉnh, theo cách này bạn sẽ có toàn quyền kiểm soát cả bài đăng và phòng trưng bày. Bạn cũng có thể sử dụng plugin trường tùy chỉnh Nâng cao (trường lặp lại được bật) để tạo thư viện trong bảng điều khiển trường tùy chỉnh của bài đăng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.