Sửa đổi câu lệnh where sql HOÀNG QUÁCH (ok)

https://www.hoangweb.com/wordpress-site/how-to-get-posts-data-wordpress

Tham số của các hàm lấy dữ liệu như get_posts, WP_Query, query_posts cung cấp tính năng lọc dữ liệu khá đầy đủ, có thể làm được mọi thứ rồi, thế nhưng nếu bạn chưa thấy đáp ứng đủ hoặc đang có ý tưởng can thiệp mệnh đề chuỗi where để can thiệp sâu hơn vào lênh sql và thậm trí bạn có thể kết hợp với dữ liệu của table khác. Lúc này bạn cần đến hook posts_where. Ví dụ sau đây, tôi giới hạn bài viết theo author, kết quả chỉ trả về những bài viết của một author. Chúng ta truyền tham số URL restrict_manage_posts để lọc author.

add_filter( 'posts_where' , 'posts_where' );
 
function posts_where( $where ) {
 
    if( is_admin() ) {
        global $wpdb;
         
        if ( isset( $_GET['author_restrict_posts'] ) && !empty( $_GET['author_restrict_posts'] ) && intval( $_GET['author_restrict_posts'] ) != 0 ) {
            $author = intval( $_GET['author_restrict_posts'] );
         
            $where .= " AND ID IN (SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id=$author )";
        }
    }
    return $where;
}

Viết tiếp mệnh đề where trong câu lệnh sql vào biến $where, mọi hàm lấy dữ liệu trong wordpress đều sử dụng chung filter này. Và mọi hàm lấy dữ liệu sẽ bị sửa đổi tùy thuộc bởi hàm liên kết với filter posts_where. Những bạn cũng có thể cho phép hàm lọc dữ liệu bỏ qua filter posts_where bằng cách khai báo thêm vào tham số với thuộc tính suppress_filters=>false:

<?php
//some function that modifies the query
function useless_condition ( $where ) { return $where . ' AND 1=1 '; }
 
//attach your function to the posts_where filter
add_filter( 'posts_where' , 'useless_condition' );
 
//get posts AND make sure filters are NOT suppressed
$posts = get_posts( array( 'suppress_filters' => FALSE ) );
?>

Last updated