Який підходящий потік для користувацьких даних з URL-адреси в WP_Query?


14

У мене є багатоетапний процес, який інтегрує складні облицювання у WP-запити. Проблема полягає в тому, що чим глибше я стаю тим більш нечітким, як я повинен працювати, і я міг би використовувати керівництво, а не бути винахідливим (і копати собі нору).

Загальні етапи у мене (псевдокод, але близький до реального):

  1. отримати значення з URL (щось просте, як person=1)
  2. обробляти значення та додавати інструкції до користувацьких запитів ( $relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );)
  3. отримати остаточні вказівки щодо користувацького запиту та генерувати відповідні директиви SQL

На сьогоднішній день у мене дуже багато такого (відносини, систематика, дати), і це стає крихким (один кут коду не надає значення там, де інший кут коду очікує, що він знайде, і все розпадається).

Настільки велике питання - який правильний протокол для передачі, отримання, зберігання та обробки користувацьких даних на WP за допомогою URL-адреси ?

Менші частини:

  • як переконатися, що я не стикаюся з внутрішніми програмами WP?
  • де і як я зберігаю посередницькі дані?
    • різниця між queryі query_varsвластивості? Вони, схоже, використовуються майже однаково в коді, але вони, як правило, утримують різні значення та методи, що сприяють query_varsодному.

Відповіді:


6

Я думаю, що функція WP, яку ви шукаєте, - це add_rewrite_tag . Він спрямований на те, щоб додати до вашої URL-адреси спеціальні параметри GET та автоматично включити їх у query_vars.

Наприклад, ви можете додати до гачка init таке:

add_rewrite_tag('%person%','([^&]+)');

Для такої URL-адреси, як http://example.com?person=joe , глобальна версія $wp_queryбуде

$wp_query->query_vars['person'] = 'joe'

Ви також можете додати правило перезапис, щоб зробити URL-адресою красивішою, наприклад http://example.com/person/joe

add_rewrite_rule('^person/([^/]*)/?','index.php?person=$matches[1]','top');

Додаткову інформацію та приклади див. У API перезапису .


2
Я знайшов деякий час (нарешті), щоб прочитати весь відповідний код у, WPі, WP_Queryхоча там відбувається багато чого, я думаю, що це add_rewrite_tag()здається найбільш складним способом зробити WP обізнаним з користувацьким var запитом і добре зіграти з ним.
Рарст

1
  1. Перевірте wp-include / class-wp.php, щоб перевірити будь-які зарезервовані запити_vars
  2. Я не впевнений, що ви маєте на увазі під посередницькими даними. Чи можете ви пояснити більше?
  3. WP завантажує сторінку на основі запиту по рядку URL-адреси, що перекладається як запит, вони потім обробляються WP_Query, щоб визначити, який query_var використовується.

Приклад: завантажуючи сторінку з /? Pagename = about, WP обробляє рядок запиту і знайде запит_var, який використовується є page_id.

Інший приклад: /? Cat = 1, /? Category_name = uncategorized та / category / uncategorized мають однаковий query_var 'cat'


0

Я би припустив, що це буде зроблено через $_GETта / або $_POST, а потім відповідно маніпулювати.

Крім того, зберігайте масивний масив даних у db, потім аналізуйте ідентифікатор до URL-адреси

$data_id = $_GET['id'];

$data = $wpbd->get_results("SELECT * FROM wp_epic_table WHERE id=".$id);

Запит, очевидно, не буде таким простим, він може включати безліч об'єднань та таблиць приєднання. Це те, що я роблю на одній зі своїх сторінок, аналізую унікальний ідентифікатор, а потім будую дані через MySQL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.