Truy vấn SQL để chỉ trích xuất các wp_posts hiện tại của Edward?


7

Bảng wp_posts dường như giữ lại tất cả các phiên bản giống nhau, ok rất giống nhau nhưng có lẽ khác nhau, bài viết / trang / bất cứ điều gì.

Tôi hơi đối thoại với SQL nhưng không phải WordPress. Tôi cần trích xuất chỉ những hồ sơ sẽ xuất hiện trên trang web công khai; vì vậy chỉ là bản sửa đổi gần đây nhất, và không phải tất cả các hàng được đặt chồng. Không chắc chắn làm thế nào để lọc các lĩnh vực. Rõ ràng là một cái gì đó phức tạp hơn:

select *
from wp_posts
where post_status in ('publish','revision')
order by post_modified desc

trong đó có 'bản sao' và dường như bỏ lỡ một số thứ.


1
Bạn có cần phải làm điều này thông qua SQL? Tại sao không phải là chức năng WordPress?
Hết

+1 trên @Rarst. Plus: Nếu bạn nhận được bản sao, sử dụng DISTINCT.
kaiser

Câu trả lời:


10

Thay vì xây dựng truy vấn từ đầu, sẽ dễ dàng hơn để xem chính xác truy vấn WordPress là gì khi chức năng API được sử dụng:

get_posts(array(
             'numberposts' => -1,
         ));

var_dump( $wpdb->last_query );

Cung cấp SQL sau:

SELECT wp_posts.* FROM wp_posts 
WHERE 1=1 
AND wp_posts.post_type = 'post' 
AND (wp_posts.post_status = 'publish')
ORDER BY wp_posts.post_date DESC

@Elliott yeah, tôi ước ai đó đã nói với tôi về mánh khóe đó vài năm trước khi tôi học nó :)
Rarst

Bạn nên luôn luôn sử dụng wpdb để lấy tiền tố bảng hiện tại.
Brian Fegter

@Brian Fegter truy vấn này được tạo bởi WP và do đó đã có tiền tố chính xác. Cách tiếp cận này sẽ luôn cung cấp truy vấn, cụ thể để cài đặt.
Hết

@Rarst - DOH :)
Brian Fegter

Tuyệt vời! Vì vậy, nó thực sự chỉ tìm kiếm một trạng thái "xuất bản". Nó phải được đặt thành một cái gì đó khác nếu bài viết được cập nhật. Cám ơn.
John Mee

0

Bạn nên sử dụng điều này vì Wordpress không nâng vật nặng ở đây:

$args = array(
    'showposts' => 10,
);
$posts = query_posts();
var_dump($posts);

Bạn tìm hiểu thêm về cách thêm đối số vào query_posts http://codex.wordpress.org/Class_Reference/WP_Query

Bạn cũng nên sử dụng lớp cơ sở dữ liệu Wordpress khi tạo các truy vấn MYSQL thủ công. Bạn có thể tìm hiểu thêm tại đây: http://codex.wordpress.org/Class_Reference/wpdb Wordpress cũng bao gồm một chức năng tuyệt vời để thoát dữ liệu trong các truy vấn để giữ cho hoạt động của bạn an toàn: esc_sql ($ string);

Bạn có thể sử dụng lớp db Wordpress như thế này:

global $wpdb;
$results = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE $wpdb->posts.post_status = 'publish'");

Sử dụng $ wpdb-> trước tên bảng của bạn sẽ thêm tiền tố cơ sở dữ liệu được chỉ định. Điều này rất quan trọng vì bạn có thể có nhiều cài đặt Wordpress trong một cơ sở dữ liệu bằng cách sử dụng tiền tố bảng. $ wpdb-> sẽ lấy bối cảnh tiền tố chính xác.

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.