我正在嘗試獲取另一個表列,WP_Query但它不起作用。
注意:我可以很容易地做到這一點,$wpdb->get_results( 'custom_sql' )但我想做到這一點WP_Query
我的代碼
function join_my_query( $join, $wp_query ) {
global $wpdb;
if ( $wp_query->get( 'custom_logic' ) === true ) {
$join .= " LEFT JOIN $wpdb->postmeta as pm ON $wpdb->posts.ID = pm.post_id ";
}
return $join;
}
add_filter( 'posts_join', 'join_my_query', 10, 2 );
$query = new WP_Query(
array(
'custom_logic' => true,
'post_type' => 'post',
)
);
它給了我如下所示的 SQL,它不會從連接表中選擇任何列!
生成的 SQL
SELECT
SQL_CALC_FOUND_ROWS wp_posts.ID
FROM
wp_posts
LEFT JOIN wp_postmeta as pm ON wp_posts.ID = pm.post_id
WHERE
1 = 1
AND (
(
wp_posts.post_type = 'post'
AND (
wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'future'
OR wp_posts.post_status = 'draft'
OR wp_posts.post_status = 'pending'
)
)
)
ORDER BY
wp_posts.post_date DESC
LIMIT
0, 10
它不會從我的聯接表中選擇任何列。我使用var_dump($query->posts[0])which 回傳一個WP_Post物件,它在我的連接表中沒有列。如何從我的連接表中獲取列,WP_Query如下所示
我的目標
$post = $query->posts[0];
$post->meta_key; // from my joined table, not work
$post->pm->meta_key; // pm is alias used in join, still not work
uj5u.com熱心網友回復:
根據您的預期結果,posts_join不需要過濾器。您可以使用posts_clauses過濾器輕松完成此操作!
add_filter( 'posts_clauses', 'modify_post_clauses_callback' , 10, 2 );
function modify_post_clauses_callback( $clauses, $wp_query ) {
if ( $wp_query->get( 'custom_logic' ) === true ) {
global $wpdb;
$clauses['fields'] = $clauses['fields'] . ', pm.meta_key';
$clauses['join'] = "LEFT JOIN {$wpdb->postmeta} as pm ON {$wpdb->posts}.ID = pm.post_id";
}
return $clauses;
}
$query = new WP_Query(
array(
'custom_logic' => true,
'post_type' => 'post',
)
);
$post = $query->posts[0];
$post->meta_key;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/522114.html
標籤:WordPress
