wyck
  • 0
Гуру

Сравнить переходные данные со значением метабокса

  • 0

Поэтому я не уверен, что было бы лучшим способом сделать это с точки зрения передового опыта и оптимизации.

Сценарий:

У меня есть запрос, который анализирует внешний XML-канал и сохраняет данные с помощью временного API каждые 24 часа. Это хранится в wp_options, а вся лента хранится в option_value, одно из числовых значений в ленте соответствует «весу». Например, вот как выглядит фид для этого значения.

<weight type="string"><![CDATA[120]]></weight>

В сообщениях есть поле meta_box с ключом под названием «meta_weight» с числовым значением.

Запрос сравнивает эти два значения, получая xml в виде массива и мета-значение с чем-то довольно простым, например: (я упростил этот пример, он работает).

$xml_weight = $xml->weight;
$meta_weight = get_post_meta($post->ID, 'meta_weight', true);            

if $xml_weight > $meta_weight { echo "Your heavy";}

Теперь собственно вопрос 🙂

Это сравнение значений просто выполняется на лету с помощью php, мне нужно сохранить его в базе данных, используя только false/true, чтобы подсчитать все сообщения, где это значение истинно.

Должен ли я просто добавлять это значение постепенно, используя класс $wpdb, и вставлять его в wp_postmeta.

Или есть лучший способ просто взять значение из БД и сравнить его со значением мета-поля для каждого сообщения?

Мои знания sql очень плохие.

Share
  1. Правильно ли я понимаю, что результат сравнения нужно будет пересчитывать каждый раз при обновлении XML (каждые 24 часа)?

    • 0
    • Да, точно, не каждые 24, а хотя бы раз в несколько дней, поэтому я думаю, что потребуется прямой sql-запрос?

      • 0
    • Спасибо, мне интересно, насколько это будет утомительно, если сотни записей будут перебирать и получать XML для каждой, я думаю, есть только 1 способ узнать это 🙂

      • 0
    • @Wyck Я немного неправильно понял, хотя есть один большой XML, из которого берутся значения. Будьте осторожны, чтобы не истечь время ожидания, если вы получите много файлов в задаче cron. Другой способ распространения выборки XML — вы можете связать сравнение с загрузкой страницы сообщения, но это не гарантирует, что все сообщения будут иметь заполненное и/или актуальное сравнение.

      • 0
    • Хм, да каждый пост получает данные из отдельного файла XML. На самом деле это фид api.wordpress.com и сайт, который, я думаю, принесет пользу сообществу, и на канале irc dev был некоторый интерес к тому, что я делаю. Я подумал, что, может быть, еще один способ сделать это — создать собственный RSS-канал и проанализировать его. Все еще не уверен.

      • 0
  2. Я бы сделал следующее:

    1. Создайте задачу WP-Cron (или просто используйте ежедневную задачу wp_scheduled_delete ) и подключите к ней свою функцию.
    2. В этой функции:

      • получить XML-файл;
      • получить все сообщения с meta_weight набором, используя get_posts() ;
      • прокручивать сообщения и сохранять результат сравнения в другом метаполе для каждого.
    • 0

Оставить ответ

You must login to add an answer.