WordPress에 구축 된 웹 사이트에 대한 검색 도구를 구축 중이며 WordPress의 get_posts()
기능이 최대 6 개로 제한됩니다. AND
절이 메타 값 쿼리에 사용되지만 6보다 많은 도구가 필요합니다. AND 절.WordPress get_posts()에서 사용자 정의 필드 (메타 값) 쿼리의 AND 조건 수 제한을 피하려면 어떻게해야합니까?
다음은 빈 배열을 반환하는 쿼리의 예입니다. 아래의 코드 1은 배열 print_r()
이며 빈 배열을 반환하는 get_posts()
으로 전달됩니다. 아래의 코드 2는 코드 1과 동일하지만 하나의 AND
문을 제거하고 결과를 반환합니다. 참고 여러 가지 조합을 시도했지만 이는 단지 하나의 예입니다.
의심의 여지를 피하기 위해 나는 코드 1과 일치해야하는 데이터베이스의 게시물 예제 (아래 코드 3)를 포함 시켰으므로 쿼리가 아무 것도 일치하지 않는다는 사실을 배제 할 수 있다고 생각합니다. 따라서 get_posts()
은 메타 쿼리에서 최대절까지만 처리 할 수 있다고 믿습니다. 아니면 뭔가를 놓친 것일까 요? get_posts()
에 6 개 이상의 AND
절을 사용할 수 있습니까?
코드 1 :
Array
(
[post_type] => page
[posts_per_page] => 10000
[category_name] => active-cards
[meta_query] => Array
(
[relation] => AND
[0] => Array
(
[key] => card_purchase_rate
[value] => Array
(
[0] => 0
[1] => 46
)
[compare] => BETWEEN
[type] => NUMERIC
)
[1] => Array
(
[key] => card_balance_transfer_rate
[value] => Array
(
[0] => 0
[1] => 14
)
[compare] => BETWEEN
[type] => NUMERIC
)
[2] => Array
(
[relation] => AND
[0] => Array
(
[key] => is_rewards_card
[value] => yes
[compare] => LIKE
)
[1] => Array
(
[key] => is_air_points_card
[value] => yes
[compare] => LIKE
)
[2] => Array
(
[key] => is_frequent_flyer_card
[value] => yes
[compare] => LIKE
)
)
[3] => Array
(
[key] => card_brand
[value] => Array
(
[0] => amex
[1] => mastercard
[2] => visa
)
[compare] => IN
[type] => CHAR
)
[4] => Array
(
[key] => card_provider
[value] => Array
(
[0] => anz
[1] => asb
[2] => bnz
[3] => westpac
[4] => kiwibank
[5] => tsb
[6] => warehouse_money
)
[compare] => IN
[type] => CHAR
)
)
)
코드 2 :
Array
(
[post_type] => page
[posts_per_page] => 10000
[category_name] => active-cards
[meta_query] => Array
(
[relation] => AND
[0] => Array
(
[key] => card_purchase_rate
[value] => Array
(
[0] => 0
[1] => 46
)
[compare] => BETWEEN
[type] => NUMERIC
)
[1] => Array
(
[key] => card_balance_transfer_rate
[value] => Array
(
[0] => 0
[1] => 14
)
[compare] => BETWEEN
[type] => NUMERIC
)
[2] => Array
(
[relation] => AND
[0] => Array
(
[key] => is_rewards_card
[value] => yes
[compare] => LIKE
)
[1] => Array
(
[key] => is_air_points_card
[value] => yes
[compare] => LIKE
)
[2] => Array
(
[key] => is_frequent_flyer_card
[value] => yes
[compare] => LIKE
)
)
[3] => Array
(
[key] => card_brand
[value] => Array
(
[0] => amex
[1] => mastercard
[2] => visa
)
[compare] => IN
[type] => CHAR
)
)
)
코드 3 (이이 항목과 일치해야합니다 코드 2. 코드 (1)에 의해 반환되는 게시물의 예입니다 있지만 아무 것도 반환하지 않습니다 .
여기의 요청에 따라Array
(
[0] => WP_Post Object
(
[ID] => 3742
[post_author] => 1
[post_date] => 2017-01-17 20:01:36
[post_date_gmt] => 2017-01-17 09:01:36
[post_title] => Westpac Airpoints Business MasterCard Credit Card
[post_excerpt] =>
[post_status] => publish
[comment_status] => closed
[ping_status] => closed
[post_password] =>
[post_name] => westpac-airpoints-business-mastercard-credit-card
[to_ping] =>
[pinged] =>
[post_modified] => 2017-04-11 22:08:20
[post_modified_gmt] => 2017-04-11 11:08:20
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://www.creditcardscompare.co.nz/?page_id=3742
[menu_order] => 0
[post_type] => page
[post_mime_type] =>
[comment_count] => 0
[filter] => raw
[meta] => Array
(
[card_annual_fee] => Array
(
[0] => 145
)
[card_purchase_rate] => Array
(
[0] => 20.95
)
[card_balance_transfer_rate] => Array
(
[0] => 1.99
)
[card_cash_rate] => Array
(
[0] => 22.95
)
[card_interest_free_days] => Array
(
[0] => 44
)
[card_provider] => Array
(
[0] => Westpac
)
[card_brand] => Array
(
[0] => Mastercard
)
[is_rewards_card] => Array
(
[0] => a:1:{i:0;s:3:"yes";}
)
[is_low_interest_card] => Array
(
[0] =>
)
[is_no_annual_fee_card] => Array
(
[0] =>
)
[is_balance_transfer_card] => Array
(
[0] =>
)
[is_student_card] => Array
(
[0] =>
)
[is_prestige_card] => Array
(
[0] =>
)
[is_air_new_zealand_card] => Array
(
[0] =>
)
[is_air_points_card] => Array
(
[0] => a:1:{i:0;s:3:"yes";}
)
[is_frequent_flyer_card] => Array
(
[0] => a:1:{i:0;s:3:"yes";}
)
[is_airpoint_lounge_access_card] => Array
(
[0] =>
)
[is_best_card] => Array
(
[0] =>
)
[is_black_card] => Array
(
[0] =>
)
[is_business_card] => Array
(
[0] => a:1:{i:0;s:3:"yes";}
)
[is_cash_advance_card] => Array
(
[0] =>
)
[is_cash_back_card] => Array
(
[0] =>
)
[is_cheap_card] => Array
(
[0] =>
)
[is_debit_card] => Array
(
[0] =>
)
[is_flybuys_card] => Array
(
[0] =>
)
[is_gold_card] => Array
(
[0] =>
)
[is_high_income_card] => Array
(
[0] =>
)
[is_home_loan_card] => Array
(
[0] =>
)
[is_instant_approval_card] => Array
(
[0] =>
)
[is_long_term_balance_transfer_card] => Array
(
[0] =>
)
[is_low_annual_fee_card] => Array
(
[0] =>
)
[is_low_income_card] => Array
(
[0] =>
)
[is_no_foreign_transaction_fee_card] => Array
(
[0] =>
)
[is_platinum_card?] => Array
(
[0] =>
)
[is_purchase_protection_card] => Array
(
[0] =>
)
[is_qantas_card] => Array
(
[0] =>
)
[is_signup_bonus_card] => Array
(
[0] =>
)
[is_travel_insurance_card] => Array
(
[0] =>
)
[is_zero_balance_transfer_card] => Array
(
[0] =>
)
[is_zero_interest_card] => Array
(
[0] =>
)
[card_star_rating] => Array
(
[0] => 4
)
)
[post_url] => http://www.creditcardscompare.co.nz/westpac-airpoints-business-mastercard-credit-card/
)
는 WP_query SQL
,691입니다SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id) INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id) INNER JOIN wp_postmeta AS mt3 ON (wp_posts.ID = mt3.post_id) INNER JOIN wp_postmeta AS mt4 ON (wp_posts.ID = mt4.post_id) INNER JOIN wp_postmeta AS mt5 ON (wp_posts.ID = mt5.post_id) INNER JOIN wp_postmeta AS mt6 ON (wp_posts.ID = mt6.post_id) WHERE 1=1 AND (
wp_term_relationships.term_taxonomy_id IN (78)
) AND (
(wp_postmeta.meta_key = 'card_purchase_rate' AND CAST(wp_postmeta.meta_value AS SIGNED) BETWEEN '0' AND '30')
AND
(mt1.meta_key = 'card_balance_transfer_rate' AND CAST(mt1.meta_value AS SIGNED) BETWEEN '0' AND '13')
AND
(
(mt2.meta_key = 'is_rewards_card' AND mt2.meta_value LIKE '%yes%')
AND
(mt3.meta_key = 'is_air_points_card' AND mt3.meta_value LIKE '%yes%')
AND
(mt4.meta_key = 'is_frequent_flyer_card' AND mt4.meta_value LIKE '%yes%')
)
AND
(mt5.meta_key = 'card_brand' AND mt5.meta_value IN ('amex','mastercard','visa'))
AND
(mt6.meta_key = 'card_provider' AND mt6.meta_value IN ('anz','asb','bnz','westpac','kiwibank','tsb','warehouse_money'))
) AND wp_posts.post_type = 'page' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'future' OR wp_posts.post_status = 'draft' OR wp_posts.post_status = 'pending' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10000
메타 코드 전체 쿼리를 공유하시기 바랍니다. –
안녕하세요. 도움 주셔서 감사합니다. WP_Query SQL을 원래 게시물에 추가했습니다. 주석으로 포함하기에는 너무 길기 때문에 –