Π‘ΡΠΊΠΎΠ½ΠΎΠΌΡŒΡ‚Π΅ 15% Π½Π° всСх хостинговых услугах

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свои Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ скидку Π½Π° любой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills ΠΠ°Ρ‡Π°Ρ‚ΡŒ
Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
CMS

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Tax Query Π² WordPress? ПолноС руководство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Запрос tax query Π² WordPress β€” это структурированный Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π² WP_Query, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ записи, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ таксономичСским Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌ. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ всС записи ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, tax query суТаСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… записСй, Ρ‡ΡŒΠΈ связи с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌΠΈ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ условиям β€” Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ слаг ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ, комбинация Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ таксономии ΠΈΠ»ΠΈ слоТный ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ нСскольким таксономиям.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅: Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ записи с Ρ‚Π΅Π³ΠΎΠΌ Β«web-developmentΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ относятся ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ таксономии Β«project-typeΒ» с Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ Β«client-workΒ», tax query β€” это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт для этой Π·Π°Π΄Π°Ρ‡ΠΈ. Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ SQL Ρ‡Π΅Ρ€Π΅Π· класс WP_Tax_Query WordPress, гСнСрируя ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ выраТСния JOIN ΠΈ WHERE для Ρ‚Π°Π±Π»ΠΈΡ† wp_term_relationships ΠΈ wp_term_taxonomy.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° таксономий ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² Π² WordPress

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½Ρƒ строку ΠΊΠΎΠ΄Π° запроса, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‡Ρ‘Ρ‚ΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π»Π΅ΠΆΠ°Ρ‰ΡƒΡŽ Π² основС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

Ваксономии β€” это систСмы классификации. WordPress поставляСтся с двумя Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ таксономиями β€” category ΠΈ post_tag β€” Π½ΠΎ функция register_taxonomy() позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ…. Ваксономия β€” это ΠΏΠΎ сути ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ.

Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ таксономии. Π’ таксономии category Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ β€” это Β«Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈΒ», Β«ΠžΠ±Ρ€Π°Π· ΠΆΠΈΠ·Π½ΠΈΒ» ΠΈ «БизнСс». ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ адрСсуСмых ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°:

  • term_id β€” цСлочислСнный ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² wp_terms
  • slug β€” URL-бСзопасный строковый ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, web-development)
    name β€” удобочитаСмая отобраТаСмая ΠΌΠ΅Ρ‚ΠΊΠ°
    
    Бвязи Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² β€” это сводныС записи Π² wp_term_relationships, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ID ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° записи с ID таксономии Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°. Π›ΡŽΠ±ΠΎΠΉ tax query Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счётС сводится ΠΊ поиску ΠΏΠΎ этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅.
    ПониманиС этой Ρ‚Ρ€Ρ‘Ρ…ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ структуры β€” таксономия > Ρ‚Π΅Ρ€ΠΌΠΈΠ½ > связь Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для написания эффСктивных запросов ΠΈ диагностики Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ².
    ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° tax_query
    ΠšΠ»ΡŽΡ‡ tax_query ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… массивов условий запроса, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ relation Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня. КаТдоС условиС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹:
    
    
    
    АргумСнт
    Π’ΠΈΠΏ
    ОписаниС
    РаспространённыС значСния
    
    
    
    
    
    
    
    
    —
    —
    —
    —
    
    
    
    
    
    
    
    
    `taxonomy`
    string
    Ваксономия для запроса
    `category`, `post_tag`, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ слаг
    
    
    
    
    
    
    
    
    `field`
    string
    ПолС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° для сопоставлСния
    `slug`, `name`, `term_id`, `term_taxonomy_id`
    
    
    
    
    
    
    
    
    `terms`
    string / int / array
    Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅(я) Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° для сопоставлСния
    `'technology'`, `[4, 7]`, `'web-dev'`
    
    
    
    
    
    
    
    
    `operator`
    string
    Бпособ примСнСния сопоставлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°
    `IN`, `NOT IN`, `AND`, `EXISTS`, `NOT EXISTS`
    
    
    
    
    
    
    
    
    `include_children`
    bool
    Π’ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π»ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для иСрархичСских таксономий)
    `true` (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), `false`
    
    
    
    
    
    
    
    
    `relation`
    string
    ЛогичСский ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅Π»ΡŒ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими условиями
    `AND`, `OR`
    
    
    
    
    
    АргумСнт operator ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ
    ИмСнно здСсь Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ошибки. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
    
    IN (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ записи, Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ *Π»ΡŽΠ±ΠΎΠΌΡƒ* ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ². Π­Ρ‚ΠΎ сопоставлСниС OR Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ условия.
    NOT IN β€” ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ записи, Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ².
    AND β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ записи, Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ *всСм* ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ это, ΠΊΠΎΠ³Π΄Π° запись Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько Ρ‚Π΅Π³ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.
    EXISTS β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ записи, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ *любой* Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ таксономии, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ. АргумСнт terms игнорируСтся.
    NOT EXISTS β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ записи Π±Π΅Π· Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ таксономии. ПолСзно для поиска ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π±Π΅Π· ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ ΠΈΠ»ΠΈ Ρ‚Π΅Π³ΠΎΠ².
    
    Π’Π°ΠΆΠ½Ρ‹ΠΉ нюанс: operator => 'AND' Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ условия провСряСт, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° запись Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρƒ Π² массивС terms. Π­Ρ‚ΠΎ отличаСтся ΠΎΡ‚ использования relation => 'AND' Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ условия. ΠŸΡƒΡ‚Π°Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ β€” ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённых ошибок tax query Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠΎΠ΄Π΅ WordPress.
    Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ tax query: Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ таксономии
    ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ случай использования β€” ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС записи Π² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Β«Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈΒ»:
    $args = array(
        'post_type'  => 'post',
        'tax_query'  => array(
            array(
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms'    => 'technology',
            ),
        ),
    );
    
    $query = new WP_Query( $args );
    
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            // Render post content here
        }
        wp_reset_postdata();
    }
    ВсСгда Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ wp_reset_postdata() послС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° WP_Query. НСвыполнСниС этого трСбования ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ $post, Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚Π΅Π³ΠΎΠ² шаблона, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ the_title() ΠΈ get_the_ID(), для Π»ΡŽΠ±Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… запросов Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ страницС.
    ОбъСдинСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… tax query с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ relation
    ΠšΠ»ΡŽΡ‡ relation Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ массива tax_query управляСт Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ нСсколько условий:
    $args = array(
        'post_type'  => 'post',
        'tax_query'  => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms'    => 'technology',
            ),
            array(
                'taxonomy' => 'post_tag',
                'field'    => 'slug',
                'terms'    => 'web-development',
            ),
        ),
    );
    Π­Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ записи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ *ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ* находятся Π² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Β«Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈΒ» ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π΅Π³ Β«web-developmentΒ». Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ relation Π½Π° 'OR', ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ записи, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΠ· условий.
    Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ tax query (WordPress 4.1+)
    Для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ WordPress ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ массивы tax_query, позволяя ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ составныС Π±ΡƒΠ»Π΅Π²Ρ‹ выраТСния:
    $args = array(
        'post_type'  => 'product',
        'tax_query'  => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'product_cat',
                'field'    => 'slug',
                'terms'    => array( 'laptops', 'desktops' ),
                'operator' => 'IN',
            ),
            array(
                'relation' => 'OR',
                array(
                    'taxonomy' => 'product_tag',
                    'field'    => 'slug',
                    'terms'    => 'sale',
                ),
                array(
                    'taxonomy' => 'availability',
                    'field'    => 'slug',
                    'terms'    => 'in-stock',
                ),
            ),
        ),
    );
    Π­Ρ‚ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ Π² катСгориях «Ноутбуки» ΠΈΠ»ΠΈ Β«ΠΠ°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ *Ρ‚Π°ΠΊΠΆΠ΅* Π»ΠΈΠ±ΠΎ Ρ€Π°ΡΠΏΡ€ΠΎΠ΄Π°ΡŽΡ‚ΡΡ, Π»ΠΈΠ±ΠΎ Π΅ΡΡ‚ΡŒ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ. Π’Π°ΠΊΡƒΡŽ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ воспроизвСсти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ плоского ΠΊΠ»ΡŽΡ‡Π° relation β€” Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ массивы ΡΠ²Π»ΡΡŽΡ‚ΡΡ СдинствСнным ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ.
    ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ записСй ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ таксономии
    Tax query становятся особСнно ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ Π² сочСтании с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ записСй, зарСгистрированными Ρ‡Π΅Ρ€Π΅Π· register_post_type(), ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ таксономиями Ρ‡Π΅Ρ€Π΅Π· register_taxonomy(). Рассмотрим сайт-ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ, Π³Π΄Π΅ Π²Ρ‹ рСгистрируСтС Ρ‚ΠΈΠΏ записи portfolio ΠΈ Ρ‚Π°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΡŽ portfolio_type:
    // Register custom taxonomy (typically in functions.php or a plugin)
    register_taxonomy(
        'portfolio_type',
        'portfolio',
        array(
            'label'        => 'Portfolio Types',
            'hierarchical' => true,
        )
    );
    
    // Query portfolio items of type "branding"
    $args = array(
        'post_type'  => 'portfolio',
        'tax_query'  => array(
            array(
                'taxonomy' => 'portfolio_type',
                'field'    => 'slug',
                'terms'    => 'branding',
            ),
        ),
    );
    
    $query = new WP_Query( $args );
    Когда hierarchical ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true ΠΈ include_children явно Π½Π΅ установлСн Π² false, запрос автоматичСски Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Β«brandingΒ». Π­Ρ‚ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΉ Π² стилС ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ, Π½ΠΎ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ². УстанавливайтС 'include_children' => false, ΠΊΠΎΠ³Π΄Π° трСбуСтся сопоставлСниС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ.
    ИспользованиС term_id vs. slug vs. name Π² качСствС значСния field
    
    
    
    Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля
    Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
    ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π΅Ρ€Π΅ΠΆΠ΅Π½ΠΈΠ΅
    
    
    
    
    
    
    
    
    —
    —
    —
    
    
    
    
    
    
    
    
    `slug`
    Жёстко Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ запросы Π² ΠΊΠΎΠ΄Π΅ Ρ‚Π΅ΠΌΡ‹/ΠΏΠ»Π°Π³ΠΈΠ½Π°
    Π‘Π»Π°Π³ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ Π² административной ΠΏΠ°Π½Π΅Π»ΠΈ
    
    
    
    
    
    
    
    
    `term_id`
    ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ запросы
    ID Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ окруТСниями (Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° vs. ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½)
    
    
    
    
    
    
    
    
    `name`
    УдобочитаСмая Π»ΠΎΠ³ΠΈΠΊΠ° уровня отобраТСния
    Π§ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ рСгистру; Π½Π΅Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠΉ
    
    
    
    
    
    
    
    
    `term_taxonomy_id`
    УстранСниС нСоднозначности Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… таксономиях
    Π Π΅Π΄ΠΊΠΎ трСбуСтся; ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ ID Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ таксономиями
    
    
    
    
    
    Для Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° slug Π² Ρ†Π΅Π»ΠΎΠΌ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ бСзопасным Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния читаСмости. Однако ΠΏΡ€ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ тСстовой ΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ срСдой ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ значСния term_id Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ slug для пСрСносимого ΠΊΠΎΠ΄Π°.
    БообраТСния ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ распространённыС ошибки
    Нагрузка Π½Π° Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…
    ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ tax query Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ JOIN ΠΊ wp_term_relationships. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… условий это накапливаСтся. На сайтах с дСсятками тысяч записСй ΠΏΠ»ΠΎΡ…ΠΎ составлСнныС tax query ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· основных ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страниц ΠΈ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ΠΎΠ² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….
    ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ:
    
    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ fields => 'ids', ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ID записСй, Π° Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ записСй. Π­Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… записСй ΠΈ сСриализованных Π΄Π°Π½Π½Ρ‹Ρ….
    ΠšΡΡˆΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Transients API. Tax query Π½Π° страницах Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, слСдуСт ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ set_transient() ΠΈ get_transient().
    Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ operator => 'AND' с большими массивами Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Π² условии AND добавляСт подзапрос. ВыполняйтС Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ EXPLAIN Π² MySQL ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ.
    УстанавливайтС no_found_rows => true, ΠΊΠΎΠ³Π΄Π° пагинация Π½Π΅ трСбуСтся. Π­Ρ‚ΠΎ позволяСт ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы SQL_CALC_FOUND_ROWS.
    
    $args = array(
        'post_type'      => 'post',
        'fields'         => 'ids',
        'no_found_rows'  => true,
        'tax_query'      => array(
            array(
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms'    => 'technology',
            ),
        ),
    );
    Π›ΠΎΠ²ΡƒΡˆΠΊΠ° wp_reset_postdata()
    Если Π²Ρ‹ запускаСтС Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΉ WP_Query Π²Π½ΡƒΡ‚Ρ€ΠΈ основного Ρ†ΠΈΠΊΠ»Π° Π±Π΅Π· сброса Π΄Π°Π½Π½Ρ‹Ρ… записи, глобальная пСрСмСнная $post Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ запись Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° страницы. Π­Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Π΅ ошибки: Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ записСй Π² Ρ…Π»Π΅Π±Π½Ρ‹Ρ… ΠΊΡ€ΠΎΡˆΠΊΠ°Ρ…, Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ каноничСскиС URL ΠΈ сломанныС Ρ‚Π΅Π³ΠΈ Open Graph. ВсСгда выполняйтС сброс.
    Запрос Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ²
    Если Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ terms, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, WP_Query ΠΌΠΎΠ»Ρ‡Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ноль Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². Никакой ошибки ΠΈΠ»ΠΈ прСдупрСТдСния Π½Π΅ выдаётся. ВсСгда провСряйтС сущСствованиС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ term_exists() ΠΏΠ΅Ρ€Π΅Π΄ построСниСм динамичСских tax query Π½Π° основС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ….
    $term = term_exists( 'technology', 'category' );
    if ( $term !== 0 && $term !== null ) {
        // Safe to build the tax query
    }
    Π Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ сцСнарии использования
    ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ страницы Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ²
    ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ archive.php ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ pre_get_posts для внСдрСния tax query Π² основной запрос, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡ Π°Ρ€Ρ…ΠΈΠ² для отобраТСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² Π±Π΅Π· создания ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° запроса:
    add_action( 'pre_get_posts', function( $query ) {
        if ( ! is_admin() && $query->is_main_query() && is_post_type_archive( 'portfolio' ) ) {
            $query->set( 'tax_query', array(
                array(
                    'taxonomy' => 'portfolio_type',
                    'field'    => 'slug',
                    'terms'    => array( 'branding', 'web-design' ),
                    'operator' => 'IN',
                ),
            ) );
        }
    } );
    ИспользованиС pre_get_posts эффСктивнСС, Ρ‡Π΅ΠΌ созданиС Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ WP_Query, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ измСняСт основной запрос Π΄ΠΎ обращСния ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….
    Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅
    WooCommerce рСгистрируСт product_cat ΠΈ product_tag ΠΊΠ°ΠΊ стандартныС таксономии WordPress, Π° Ρ‚Π°ΠΊΠΆΠ΅ таксономии Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ pa_color ΠΈ pa_size. Tax query ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ для «красных Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠΎΠ² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Π±Ρ€Π΅Π½Π΄Π°Β» объСдинял Π±Ρ‹ Ρ‚Ρ€ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… условия таксономии с relation => 'AND'.
    Π Π΅Π΄Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°
    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ operator => 'NOT IN' для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ спонсорского ΠΈΠ»ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΈΠ· Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π»Π΅Π½Ρ‚:
    $args = array(
        'post_type'  => 'post',
        'tax_query'  => array(
            array(
                'taxonomy' => 'post_tag',
                'field'    => 'slug',
                'terms'    => array( 'sponsored', 'promoted' ),
                'operator' => 'NOT IN',
            ),
        ),
    );
    Поиск нСклассифицированного ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°
    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ operator => 'NOT EXISTS' для Π°ΡƒΠ΄ΠΈΡ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ записСй Π±Π΅Π· ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ таксономии:
    $args = array(
        'post_type'  => 'post',
        'tax_query'  => array(
            array(
                'taxonomy' => 'category',
                'operator' => 'NOT EXISTS',
            ),
        ),
    );
    Π­Ρ‚ΠΎ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΠΎ для ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚-Π°ΡƒΠ΄ΠΈΡ‚ΠΎΠ² Π½Π° ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… сайтах, Π³Π΄Π΅ записи ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π±Π΅Π· Π½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ назначСния таксономии.
    Tax query vs. Meta query: Π²Ρ‹Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ инструмСнта
    РаспространённоС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π° WordPress β€” Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ таксономии ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ записи. Π­Ρ‚ΠΎΡ‚ Π²Ρ‹Π±ΠΎΡ€ ΠΈΠΌΠ΅Π΅Ρ‚ сущСствСнныС послСдствия для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
    
    
    
    ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ
    Tax query (`tax_query`)
    Meta query (`meta_query`)
    
    
    
    
    
    
    
    
    —
    —
    —
    
    
    
    
    
    
    
    
    Π’Π°Π±Π»ΠΈΡ†Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
    `wp_term_relationships` (индСксированная)
    `wp_postmeta` (ΠΌΠ΅Π½Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ)
    
    
    
    
    
    
    
    
    ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов
    Высокая β€” Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° для поиска ΠΏΠΎ Π½Π°Π±ΠΎΡ€Π°ΠΌ
    МСдлСннСС ΠΏΡ€ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ β€” структура EAV
    
    
    
    
    
    
    
    
    ЀасСтная Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ
    Нативная, эффСктивная
    Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ
    
    
    
    
    
    
    
    
    Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…
    ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ (Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹)
    ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
    
    
    
    
    
    
    
    
    Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ использования
    ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡ, классификация
    Атрибуты, измСрСния, Ρ„Π»Π°Π³ΠΈ
    
    
    
    
    
    
    
    
    Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
    АвтоматичСскоС Ρ‡Π΅Ρ€Π΅Π· ID таксономии Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ²
    Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€ΡƒΡ‡Π½ΠΎΠΉ настройки индСксов
    
    
    
    
    
    ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ: Ссли Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ (Ρ†Π²Π΅Ρ‚, катСгория, Ρ‚ΠΈΠΏ, статус), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΡŽ. Если это ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи (Ρ†Π΅Π½Π°, вСс, врСмСнная ΠΌΠ΅Ρ‚ΠΊΠ° ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ записи. ΠŸΡƒΡ‚Π°Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ β€” ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространённых ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ WordPress-сайтов ΠΏΡ€ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.
    БообраТСния ΠΎ хостингС для WordPress-сайтов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… слоТныС запросы
    Tax query с нСсколькими условиями, Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΈΠ»ΠΈ большими Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ слоТный SQL. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ этих запросов Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ зависит ΠΎΡ‚ сСрвСрного окруТСния.
    На ΠΏΠ»Π°Π½Π΅ VPS Π₯остинга Ρƒ вас Π΅ΡΡ‚ΡŒ прямой ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ MySQL β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ innodb_buffer_pool_size, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ кэш запросов (MySQL 5.7 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅ вСрсии) ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ индСксы ΠΊ wp_term_relationships ΠΏΡ€ΠΈ нСобходимости. ΠžΠ±Ρ‰ΠΈΠ΅ окруТСния, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ уровня настройки Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….
    Если Π²Ρ‹ управляСтС высоконагруТСнным ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠΌ WooCommerce с ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠ΅ΠΉ Π½Π° основС tax query, Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ сСрвСр обСспСчиваСт ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ устраняСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Β«ΡˆΡƒΠΌΠ½ΠΎΠ³ΠΎ сосСда», ΡΠ½ΠΈΠΆΠ°ΡŽΡ‰ΡƒΡŽ врСмя ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° запросов Π½Π° ΠΎΠ±Ρ‰Π΅ΠΉ инфраструктурС.
    Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½ΠΎ удобство ΠΏΠ°Π½Π΅Π»ΠΈ управлСния ΠΏΡ€ΠΈ сохранСнии сСрвСрного доступа для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, VPS с cPanel прСдоставляСт ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹ΠΉ компромисс β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΊ MySQL Ρ‡Π΅Ρ€Π΅Π· phpMyAdmin наряду с ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ интСрфСйсом управлСния.
    Π‘Π°ΠΉΡ‚Π°ΠΌ, Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ WordPress REST API Π½Π° основС tax query, Ρ‚Π°ΠΊΠΆΠ΅ слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Redis ΠΈΠ»ΠΈ Memcached) Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ сСрвСра, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ настраиваСтся Π½Π° ΠŸΠ°Π½Π΅Π»ΡΡ… управлСния VPS, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ слои ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ PHP ΠΈ Π½Π° сторонС сСрвСра.
    ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ тСхничСский чСклист
    ΠŸΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ tax query Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ срСдС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:
    
    БущСствованиС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ term_exists() для Π»ΡŽΠ±Ρ‹Ρ… динамичСски Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ²
    wp_reset_postdata() Π²Ρ‹Π·Π²Π°Π½ β€” послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° WP_Query, Π±Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
    include_children явно Π·Π°Π΄Π°Π½ β€” Π½Π΅ ΠΏΠΎΠ»Π°Π³Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для иСрархичСских таксономий, Ссли Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… элСмСнтов Π½Π΅ являСтся Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹ΠΌ
    fields => 'ids' ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ β€” Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ записСй Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ
    no_found_rows => true Π·Π°Π΄Π°Π½ β€” для любого запроса, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΠΈ
    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Transients API для запросов Π½Π° высоконагруТСнных страницах Π°Ρ€Ρ…ΠΈΠ²ΠΎΠ² ΠΈΠ»ΠΈ Π»Π΅Π½Π΄ΠΈΠ½Π³Π°Ρ…
    pre_get_posts ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»Π΅Π½ β€” ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ экзСмплярами WP_Query для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ основного запроса
    Π’Ρ‹Π±ΠΎΡ€ operator ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Ρ‘Π½ β€” Ρ€Π°Π·Π»ΠΈΡ‡Π°ΠΉΡ‚Π΅ IN (любой Ρ‚Π΅Ρ€ΠΌΠΈΠ½), AND (всС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹) ΠΈ NOT IN (ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅) ΠΏΠ΅Ρ€Π΅Π΄ написаниСм условия
    Π Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ relation ΠΈ operator понято β€” relation соСдиняСт условия; operator управляСт сопоставлСниСм Π²Π½ΡƒΡ‚Ρ€ΠΈ условия
    Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ массивы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для составной Π»ΠΎΠ³ΠΈΠΊΠΈ β€” Π½Π΅ ΠΏΡ‹Ρ‚Π°ΠΉΡ‚Π΅ΡΡŒ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ AND/OR Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ плоского ΠΊΠ»ΡŽΡ‡Π° relation
  • Запрос ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… зафиксирован ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ»Π°Π³ΠΈΠ½ Query Monitor ΠΈΠ»ΠΈ SAVEQUERIES для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сгСнСрированного SQL ΠΏΠ΅Ρ€Π΅Π΄ запуском

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ relation => 'AND' ΠΈ operator => 'AND' Π² tax query?

relation β€” это ΠΊΠ»ΡŽΡ‡ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠΉ нСсколько условий tax query ΠΌΠ΅ΠΆΠ΄Ρƒ собой β€” ΠΎΠ½ опрСдСляСт, Π΄ΠΎΠ»ΠΆΠ½Π° Π»ΠΈ запись ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ всСм условиям (AND) ΠΈΠ»ΠΈ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠΌΡƒ (OR). operator β€” это ΠΊΠ»ΡŽΡ‡ уровня условия, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ, ΠΊΠ°ΠΊ массив terms сопоставляСтся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ условия β€” AND Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ записи Π±Ρ‹Π»ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ всС пСрСчислСнныС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΠΎΠΉ tax query Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ², хотя записи ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚?

НаиболСС распространённыС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹: ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° значСния terms, Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ field (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° field установлСн Π² slug), запрос ΠΊ таксономии, Π½Π΅ зарСгистрированной для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° записСй, ΠΈΠ»ΠΈ использованиС operator => 'AND' с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π½ΠΈ ΠΎΠ΄Π½Π° запись Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ SAVEQUERIES ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ сырой SQL для диагностики.

МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ tax query Π²Π½ΡƒΡ‚Ρ€ΠΈ WordPress REST API?

Π”Π°. WP_REST_Posts_Controller REST API ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ tax_query косвСнно Ρ‡Π΅Ρ€Π΅Π· зарСгистрированныС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса. Для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… таксономий Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ 'show_in_rest' => true ΠΏΡ€ΠΈ рСгистрации таксономии. Для слоТных многоусловных запросов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ REST, которая Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ WP_Query Π½Π° сторонС сСрвСра.

ВлияСт Π»ΠΈ include_children => true Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ?

Π”Π°. Когда include_children Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для иСрархичСских таксономий), WordPress выполняСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ запрос для получСния всСх ID Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ построСниСм основного запроса. На таксономиях с Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΌΠΈ иСрархиями ΠΈ большим количСством Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² этот ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ запрос добавляСт ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΡ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы. УстанавливайтС 'include_children' => false, ΠΊΠΎΠ³Π΄Π° трСбуСтся Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ сопоставлСниС Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² Π±Π΅Π· наслСдования Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ².

БущСствуСт Π»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° количСство условий Π² tax query?

Π’ ядрС WordPress Π½Π΅Ρ‚ Тёстко Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ограничСния, ΠΎΠ΄Π½Π°ΠΊΠΎ практичСскиС ограничСния Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ максимальной Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ соСдинСний MySQL ΠΈ ΠΏΠΎΡ€ΠΎΠ³Π°ΠΌΠΈ слоТности запросов. Π‘ΠΎΠ»Π΅Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘Ρ…-пяти условий Π² ΠΎΠ΄Π½ΠΎΠΌ tax query β€” это сигнал ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ модСль Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π² пСрСсмотрС: Ρ‡Π΅Ρ€Π΅Π· Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ поисковый индСкс (Elasticsearch, Typesense) ΠΈΠ»ΠΈ Ρ€Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ таксономии для сокращСния количСства условий.