Поэтому я не уверен, что было бы лучшим способом сделать это с точки зрения передового опыта и оптимизации.
Сценарий:
У меня есть запрос, который анализирует внешний 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 очень плохие.
Правильно ли я понимаю, что результат сравнения нужно будет пересчитывать каждый раз при обновлении XML (каждые 24 часа)?
Да, точно, не каждые 24, а хотя бы раз в несколько дней, поэтому я думаю, что потребуется прямой sql-запрос?
Спасибо, мне интересно, насколько это будет утомительно, если сотни записей будут перебирать и получать XML для каждой, я думаю, есть только 1 способ узнать это 🙂
@Wyck Я немного неправильно понял, хотя есть один большой XML, из которого берутся значения. Будьте осторожны, чтобы не истечь время ожидания, если вы получите много файлов в задаче cron. Другой способ распространения выборки XML — вы можете связать сравнение с загрузкой страницы сообщения, но это не гарантирует, что все сообщения будут иметь заполненное и/или актуальное сравнение.
Хм, да каждый пост получает данные из отдельного файла XML. На самом деле это фид api.wordpress.com и сайт, который, я думаю, принесет пользу сообществу, и на канале irc dev был некоторый интерес к тому, что я делаю. Я подумал, что, может быть, еще один способ сделать это — создать собственный RSS-канал и проанализировать его. Все еще не уверен.
Я бы сделал следующее:
wp_scheduled_delete
) и подключите к ней свою функцию.В этой функции:
meta_weight
набором, используяget_posts()
;