diff --git a/includes/class-syndication-wp-rss-client.php b/includes/class-syndication-wp-rss-client.php index cb89325163268201bba9386393b48813dc76798f..2fe97f63d2b9fec358c9ab64cd53ab9ed4be09c8 100644 --- a/includes/class-syndication-wp-rss-client.php +++ b/includes/class-syndication-wp-rss-client.php @@ -33,6 +33,10 @@ class Syndication_WP_RSS_Client extends SimplePie implements Syndication_Client $this->default_comment_status = get_post_meta( $site_ID, 'syn_default_comment_status', true ); $this->default_ping_status = get_post_meta( $site_ID, 'syn_default_ping_status', true ); + add_action( 'syn_post_pull_new_post', array( __CLASS__, 'save_meta' ), 10, 5 ); + add_action( 'syn_post_pull_new_post', array( __CLASS__, 'save_tax' ), 10, 5 ); + add_action( 'syn_post_pull_edit_post', array( __CLASS__, 'update_meta' ), 10, 5 ); + add_action( 'syn_post_pull_edit_post', array( __CLASS__, 'update_tax' ), 10, 5 ); } public static function get_client_data() { @@ -185,5 +189,100 @@ class Syndication_WP_RSS_Client extends SimplePie implements Syndication_Client return $posts; } - + + public static function save_meta( $result, $post, $site, $transport_type, $client ) { + if ( ! $result || is_wp_error( $result ) || ! isset( $post['postmeta'] ) ) { + return false; + } + $categories = $post['post_category']; + wp_set_post_terms($result, $categories, 'category', true); + $metas = $post['postmeta']; + + //handle enclosures separately first + $enc_field = isset( $metas['enc_field'] ) ? $metas['enc_field'] : null; + $enclosures = isset( $metas['enclosures'] ) ? $metas['enclosures'] : null; + if ( isset( $enclosures ) && isset ( $enc_field ) ) { + // first remove all enclosures for the post (for updates) if any + delete_post_meta( $result, $enc_field); + foreach( $enclosures as $enclosure ) { + if (defined('ENCLOSURES_AS_STRINGS') && constant('ENCLOSURES_AS_STRINGS')) { + $enclosure = implode("\n", $enclosure); + } + add_post_meta($result, $enc_field, $enclosure, false); + } + + // now remove them from the rest of the metadata before saving the rest + unset($metas['enclosures']); + } + + foreach ($metas as $meta_key => $meta_value) { + add_post_meta($result, $meta_key, $meta_value, true); + } + } + + public static function update_meta( $result, $post, $site, $transport_type, $client ) { + if ( ! $result || is_wp_error( $result ) || ! isset( $post['postmeta'] ) ) { + return false; + } + $categories = $post['post_category']; + wp_set_post_terms($result, $categories, 'category', true); + $metas = $post['postmeta']; + + // handle enclosures separately first + $enc_field = isset( $metas['enc_field'] ) ? $metas['enc_field'] : null; + $enclosures = isset( $metas['enclosures'] ) ? $metas['enclosures'] : null; + if ( isset( $enclosures ) && isset( $enc_field ) ) { + // first remove all enclosures for the post (for updates) + delete_post_meta( $result, $enc_field); + foreach( $enclosures as $enclosure ) { + if (defined('ENCLOSURES_AS_STRINGS') && constant('ENCLOSURES_AS_STRINGS')) { + $enclosure = implode("\n", $enclosure); + } + add_post_meta($result, $enc_field, $enclosure, false); + } + + // now remove them from the rest of the metadata before saving the rest + unset($metas['enclosures']); + } + + foreach ($metas as $meta_key => $meta_value) { + update_post_meta($result, $meta_key, $meta_value); + } + } + + public static function save_tax( $result, $post, $site, $transport_type, $client ) { + if ( ! $result || is_wp_error( $result ) || ! isset( $post['tax'] ) ) { + return false; + } + $taxonomies = $post['tax']; + foreach ( $taxonomies as $tax_name => $tax_value ) { + // post cannot be used to create new taxonomy + if ( ! taxonomy_exists( $tax_name ) ) { + continue; + } + wp_set_object_terms($result, (string)$tax_value, $tax_name, true); + } + } + + public static function update_tax( $result, $post, $site, $transport_type, $client ) { + if ( ! $result || is_wp_error( $result ) || ! isset( $post['tax'] ) ) { + return false; + } + $taxonomies = $post['tax']; + $replace_tax_list = array(); + foreach ( $taxonomies as $tax_name => $tax_value ) { + //post cannot be used to create new taxonomy + if ( ! taxonomy_exists( $tax_name ) ) { + continue; + } + if ( !in_array($tax_name, $replace_tax_list ) ) { + //if we haven't processed this taxonomy before, replace any terms on the post with the first new one + wp_set_object_terms($result, (string)$tax_value, $tax_name ); + $replace_tax_list[] = $tax_name; + } else { + //if we've already added one term for this taxonomy, append any others + wp_set_object_terms($result, (string)$tax_value, $tax_name, true); + } + } + } }