@toscho залишив коментар до цієї відповіді, який змусив мене задуматися. Скільки нам слід довіряти світовій сфері, особливо стосовно пост глобалів $post
?
І що? Глобальну змінну можна замінити всім перед запуском чеку. У цьому суть глобальних змінних: глобальний доступ.
$post
наприклад, це, безумовно, один із глобалів, який в основному модифікується або в межах самої теми, або за допомогою плагінів. Тим не менш, це також глобальний, який найчастіше використовується в інших додатках в рамках заданого шаблону, наприклад, для налаштування пов’язаних публікацій.
З відповідей (та коментування) на декілька публікацій із специфічними проблемами, спричиненими використанням користувацьких запитів , насправді виділяється, що більшість проблем виникає через те, що користувацькі запити не скидаються (користувацькі запити змінюють глобальні точки, встановлені основним запитом).
З цього видно, що $post
це не є надійним. Будь-який погано написаний фрагмент коду, який використовує спеціальний запит, може змінити $post
глобальний, що, в свою чергу, щось порушить (наприклад, пов'язані повідомлення).
Лише кілька розробників WordPress насправді достатньо обізнані у внутрішніх роботах ядра і знають, чого слід уникати, а чого ні. Більша кількість користувачів не має уявлення про те, як працює ядро WordPress.
Вони просто завантажують тему і встановлюють плагіни, щоб зробити те, що потрібно, або навіть просто скопіювати код з підручника. Скажімо, вони встановлюють погано написаний плагін, який розбиває пов'язані публікації на їхній одній публікації, як вони дізнаються, що це спричинило? Чи зможуть вони розібратися в цьому самі або вони стануть сотою особою, яка пише електронний лист автору теми про цю проблему або розміщує запитання на цьому веб-сайті?
Моє запитання: Як можна захиститись від таких проблем, спричинених іншим імпортованим кодом, коли глобальний подібний $post
такий ненадійний? Чи варто ми використовувати глобальний, як $post
взагалі? Які альтернативи?
Просто поділюсь своєю думкою тут, перш ніж зробити висновок: я подумав (і в деяких темах і плагінах теж), використовуючи wp_reset_postdata()
або wp_reset_query()
перед тим, як використовувати $post
, щоб переконатися, що глобальна система перезавантажується до основних запитів $post
. Але чому я повинен надувати свій код у своїй темі, оскільки хтось ще не правильно кодував свій плагін? І якщо хтось правильно скинув свій власний запит, ця операція буде запущена вдруге, що не годиться.
Другий метод, про який я думав, - це використання, $wp_query
а потім використання його методів, щось подібне $wp_query->post
.
Будь-які думки з цього приводу будуть вдячні.