我在 Wordpress 中構建了一個短代碼,用于顯示來自特定自定義分類的媒體檔案。使用“Shortcake (Shortcode UI)”在經典編輯器中呈現代碼時,代碼在后端正常作業。但是,在前端,它不會產生任何結果。
我發現 WP_Query 生成的 SQL 陳述句在后端和前端是不同的,即使 args 是相同的。我不明白為什么會這樣。
這是 $args:
$args = array(
'post_type' => 'attachment',
'post_status' => 'any',
'tax_query' => array(
array(
'taxonomy' => 'media_folder',
'field' => 'term_id',
'terms' => 385
),
),
);
$the_query = WP_Query($args);
當我 print_r($the_query) 并查看 Shortcode UI 包裝器中的結果時,這是我看到的最后一個查詢,它按預期作業:
/*BACK END*/
SELECT SQL_CALC_FOUND_ROWS wp_posts.id
FROM wp_posts
LEFT JOIN wp_term_relationships
ON (
wp_posts.id = wp_term_relationships.object_id)
LEFT JOIN wp_posts AS p2
ON (
wp_posts.post_parent = p2.id)
WHERE 1=1
AND (
wp_term_relationships.term_taxonomy_id IN (385) )
AND wp_posts.post_type = 'attachment'
AND ( ( (
wp_posts.post_status <> 'trash'
AND wp_posts.post_status <> 'auto-draft' )
OR (
wp_posts.post_status = 'inherit'
AND (
p2.post_status <> 'trash'
AND p2.post_status <> 'auto-draft'))))
GROUP BY wp_posts.id
ORDER BY wp_posts.post_date DESC
LIMIT 0, 5
在網站的前端,這是生成的最終查詢,它沒有產生任何結果:
/*FRONT END*/
SELECT SQL_CALC_FOUND_ROWS wp_posts.id
FROM wp_posts
LEFT JOIN wp_posts AS p2
ON (
wp_posts.post_parent = p2.id)
WHERE 1=1
AND (
0 = 1 )
AND wp_posts.post_type = 'attachment'
AND ( ( (
wp_posts.post_status <> 'trash'
AND wp_posts.post_status <> 'auto-draft' )
OR (
wp_posts.post_status = 'inherit'
AND (
p2.post_status <> 'trash'
AND p2.post_status <> 'auto-draft' ) ) ) )
GROUP BY wp_posts.id
ORDER BY wp_posts.post_date DESC
LIMIT 0, 5
查詢的前端版本省略了對“wp_term_relationships”表的任何參考,我終生無法弄清楚原因。或者在給出完全相同的引數的情況下,為什么 SQL 陳述句應該有所不同。
我錯過了什么?
uj5u.com熱心網友回復:
- 檢查分類法是否是公共的
- 檢查是否有任何插件或主題正在使用可能修改最終查詢結果的 pre_get_post 過濾器。
如果您有一個包含大量插件的網站,但嘗試像任何搜索插件一樣通過其功能將插件列入候選名單,則第二個選項可能不實用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/409307.html
標籤:
