Получите полный контент из каналов и сохраните дубликат на моем сайте

Итак, теперь я редактирую старую проблему, потому что ее сделали, но теперь у меня новая проблема. Я знаю запросы mysql, но не запросы WordPress. Я делаю это с запросами mysql и хорошо работаю, но сервер идет чертовски медленно. Я знаю, что я 'm работает около 30 запросов на загрузку страницы, так что есть ли способ сделать это легко с помощью wordpress-запросов или чего-то еще ???

<?php $rss = fetch_feed('http://example.com/feed'); if (!is_wp_error( $rss ) ) : $maxitems = $rss->get_item_quantity(10); $rss_items = $rss->get_items(0, $maxitems); endif; if ($maxitems == 0) ; else foreach ( $rss_items as $item ) : $posttitle=$item->get_title(); $postcontent=$item->get_description(); $pt=mysql_real_escape_string($posttitle); $pc=mysql_real_escape_string($postcontent); $result=mysql_query("SELECT post_title FROM wp_posts WHERE post_title='".$pt."'"); if(mysql_num_rows>0) { echo "hello"; mysql_query("UPDATE wp_posts SET post_title='".$pt."',post_content='".$pc."' WHERE post_title='".$pt."'"); } else { echo "hi"; mysql_query("INSERT INTO wp_posts (post_title,post_content) VALUES ('".$pt."','".$pc."')"); } endforeach; ?> 

Вы можете сделать это на фоне, используя некоторые ajax при загрузке страницы, вот непроверенный пример, чтобы показать идею.

 jQuery(function() { jQuery.get('http://domain.tld/remote'); }); <?php function is_ajax() { return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) and strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); } function add_rewrite_rules($wp_rewrite) { $new_rules = array ( 'remote' => 'index.php?remote=true' ); $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } function add_query_vars($vars) { array_push($vars, 'remote'); return $vars; } function remote_feed() { if (($var = get_query_var('remote')) and is_ajax()) { // get remote feed and insert/update posts } } add_action('generate_rewrite_rules', 'add_rewrite_rules'); add_filter('query_vars','add_query_vars'); add_action('template_redirect', 'remote_feed'); 

Создание нового сообщения должно выполняться с wp_insert_post() функций wp_insert_post() .

Также такие задачи, как выбор удаленных ресурсов и вставка в базу данных при каждой загрузке страницы, обычно имеют мало смысла. Какой смысл запрашивать и вставлять одни и те же данные снова и снова?

Обновить.

Обновления не будут сильно отличаться от вложений для производительности. Перезаписывать все из корма каждый раз просто ужасно неэффективно.

Существует несколько оптимизаций для обработки, которые уменьшат нагрузку:

  • часто выполняйте код и отключайте его от загрузки страницы, функциональность WP Cron подходит для этого
  • только вставлять новые сообщения, это означает, что вам нужно будет идентифицировать записи, уже присутствующие в базе данных по некоторым критериям (в зависимости от ваших исходных данных)
  • если вы по-прежнему хотите обновлять уже имеющиеся сообщения, сначала попробуйте определить, действительно ли они были изменены, например, путем сравнения дат