Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
240 lines (190 sloc) 6.43 KB
<?php
/*
Plugin Name: RSS RAD Importer
Plugin URI: http://wordpress.org/extend/plugins/rss-importer/
Description: Import posts from an RSS feed to display for RAD 2014.
Author: wordpressdotorg mods by Leta
Version: 0.2
Stable tag: 0.2
License: GPL version 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
RSS FEED URL IS http://digitalcommons.hsc.unt.edu/rad/recent.rss
*/
include( plugin_dir_path( __FILE__ ) . 'additions.php');
if ( !defined('WP_LOAD_IMPORTERS') )
return;
// Load Importer API
require_once ABSPATH . 'wp-admin/includes/import.php';
if ( !class_exists( 'WP_Importer' ) ) {
$class_wp_importer = ABSPATH . 'wp-admin/includes/class-wp-importer.php';
if ( file_exists( $class_wp_importer ) )
require_once $class_wp_importer;
}
/**
* RSS Importer
*
* @package WordPress
* @subpackage Importer
*/
/**
* RSS Importer
*
* Will process a RSS feed for importing posts into WordPress. This is a very
* limited importer and should only be used as the last resort, when no other
* importer is available.
*
* @since unknown
*/
if ( class_exists( 'WP_Importer' ) ) {
class RSS_Import extends WP_Importer {
var $posts = array ();
var $file;
function header() {
echo '<div class="wrap">';
screen_icon();
echo '<h2>'.__('Import RSS', 'rss-importer').'</h2>';
}
function footer() {
echo '</div>';
}
function greet() {
echo '<div class="narrow">';
echo '<p>'.__('Howdy! This importer allows you to extract posts from an RSS 2.0 file into your WordPress site. This is useful if you want to import your posts from a system that is not handled by a custom import tool. Pick an RSS file to upload and click Import.', 'rss-importer').'</p>';
wp_import_upload_form("admin.php?import=rss&amp;step=1");
echo '</div>';
}
function _normalize_tag( $matches ) {
return '<' . strtolower( $matches[1] );
}
function get_posts() {
global $wpdb;
set_magic_quotes_runtime(0);
$datalines = file($this->file); // Read the file into an array
$importdata = implode('', $datalines); // squish it
$importdata = str_replace(array ("\r\n", "\r"), "\n", $importdata);
preg_match_all('|<item>(.*?)</item>|is', $importdata, $this->posts);
$this->posts = $this->posts[1];
$index = 0;
foreach ($this->posts as $post) {
preg_match('|<title>(.*?)</title>|is', $post, $post_title);
$post_title = str_replace(array('<![CDATA[', ']]>'), '', $wpdb->escape( trim($post_title[1]) ));
/*
preg_match_all('|<category>(.*?)</category>|is', $post, $categories);
$categories = $categories[1];
if (!$categories) {
preg_match_all('|<dc:subject>(.*?)</dc:subject>|is', $post, $categories);
$categories = $categories[1];
}
$cat_index = 0;
foreach ($categories as $category) {
$categories[$cat_index] = $wpdb->escape( html_entity_decode( $category ) );
$cat_index++;
}
*/
preg_match('|<guid.*?>(.*?)</guid>|is', $post, $guid);
if ($guid)
$guid = $wpdb->escape(trim($guid[1]));
else
$guid = '';
preg_match('|<description>(.*?)</description>|is', $post, $post_content);
//preg_match('|<content:encoded>(.*?)</content:encoded>|is', $post, $post_content);
$post_content = str_replace(array ('<![CDATA[', ']]>'), '', $wpdb->escape(trim($post_content[1])));
if (!$post_content) {
// This is for feeds that put content in description
preg_match('|<description>(.*?)</description>|is', $post, $post_content);
$post_content = $wpdb->escape( html_entity_decode( trim( $post_content[1] ) ) );
}
// Clean up content
$post_content = preg_replace_callback('|<(/?[A-Z]+)|', array( &$this, '_normalize_tag' ), $post_content);
$post_content = str_replace('<br>', '<br />', $post_content);
$post_content = str_replace('<hr>', '<hr />', $post_content);
preg_match_all('|<author>(.*?)</author>|is', $post, $tags_input);
$tags_input = $tags_input[1];
$tags_index = 0;
foreach ($tags_input as $tag) {
$tags_input[$tag] = $wpdb->escape( html_entity_decode( $tag ) );
$tags_index++;
}
preg_match('|<link>(.*?)</link>|is', $post, $post_excerpt);
$post_excerpt = $wpdb->escape( trim($post_excerpt[1]) );
$arr = explode('RAD14/', $post_excerpt);
$categories = explode('/', $arr[1]);
$cat_index = 0;
foreach ($categories as $category) {
$categories[$cat_index] = $wpdb->escape( html_entity_decode( $category ) );
$cat_index++;
}
$post_status = 'publish';
$this->posts[$index] = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_status', 'guid', 'categories', 'tags_input', 'post_excerpt');
$index++;
}
}
function import_posts() {
echo '<ol>';
foreach ($this->posts as $post) {
echo "<li>".__('Importing post...', 'rss-importer');
extract($post);
if ($post_id = post_exists($post_title, $post_content, $post_date)) {
_e('Post already imported', 'rss-importer');
} else {
$post_id = wp_insert_post($post);
if ( is_wp_error( $post_id ) )
return $post_id;
if (!$post_id) {
_e('Couldn&#8217;t get post ID', 'rss-importer');
return;
}
if (0 != count($categories))
wp_create_categories($categories, $post_id);
_e('Done!', 'rss-importer');
}
echo '</li>';
}
echo '</ol>';
}
function import() {
$file = wp_import_handle_upload();
if ( isset($file['error']) ) {
echo $file['error'];
return;
}
$this->file = $file['file'];
$this->get_posts();
$result = $this->import_posts();
if ( is_wp_error( $result ) )
return $result;
wp_import_cleanup($file['id']);
do_action('import_done', 'rss');
echo '<h3>';
printf(__('All done. <a href="%s">Have fun!</a>', 'rss-importer'), get_option('home'));
echo '</h3>';
}
function dispatch() {
if (empty ($_GET['step']))
$step = 0;
else
$step = (int) $_GET['step'];
$this->header();
switch ($step) {
case 0 :
$this->greet();
break;
case 1 :
check_admin_referer('import-upload');
$result = $this->import();
if ( is_wp_error( $result ) )
echo $result->get_error_message();
break;
}
$this->footer();
}
function RSS_Import() {
// Nothing.
}
}
$rss_import = new RSS_Import();
register_importer('rss', __('RSS', 'rss-importer'), __('Import posts from an RSS feed.', 'rss-importer'), array ($rss_import, 'dispatch'));
} // class_exists( 'WP_Importer' )
function rss_importer_init() {
load_plugin_textdomain( 'rss-importer', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
}
add_action( 'init', 'rss_importer_init' );
You can’t perform that action at this time.