WP RSS Aggregator - Version 4.17.5

Version Description

(2020-04-22) = Changed - Now showing a case study of a site using the Pro Plan in the on-boarding wizard. - Licenses are now managed by the main site. Child sites do not have access to the licenses page.

Fixed - The custom feed did not include items imported as posts or other post types.

Removed - Temporarily disabled the "What's New" page. - Removed the integration with Lorem on the "Help & Support" page. - Removed the integration with Lorem on the "More Features" page.

Download this release

Release Info

Developer Mekku
Plugin Icon 128x128 WP RSS Aggregator
Version 4.17.5
Comparing to
See all releases

Code changes from version 4.17.4 to 4.17.5

CHANGELOG.md CHANGED
@@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file.
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
  and this project adheres to [Semantic Versioning](http://semver.org/).
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  ## [4.17.4] - 2020-03-16
8
  ### Changed
9
  * The default template is now created based on type, not slug.
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
  and this project adheres to [Semantic Versioning](http://semver.org/).
6
 
7
+ ## [4.17.5] - 2020-04-22
8
+ ### Changed
9
+ * Now showing a case study of a site using the Pro Plan in the on-boarding wizard.
10
+ * Licenses are now managed by the main site. Child sites do not have access to the licenses page.
11
+
12
+ ### Fixed
13
+ * The custom feed did not include items imported as posts or other post types.
14
+
15
+ ### Removed
16
+ * Temporarily disabled the "What's New" page.
17
+ * Removed the integration with Lorem on the "Help & Support" page.
18
+ * Removed the integration with Lorem on the "More Features" page.
19
+
20
  ## [4.17.4] - 2020-03-16
21
  ### Changed
22
  * The default template is now created based on type, not slug.
images/welcome-page/demo.jpg ADDED
Binary file
images/welcome-page/demo.png DELETED
Binary file
includes/Aventura/Wprss/Core/Licensing/Manager.php CHANGED
@@ -717,7 +717,7 @@ class Manager {
717
  $_key = sprintf( self::DB_LICENSE_KEYS_OPTION_PATTERN, $_addonId );
718
  $keys[ $_key ] = $_license->getKey();
719
  }
720
- update_option( self::DB_LICENSE_KEYS_OPTION_NAME, $keys );
721
 
722
  return $this;
723
  }
@@ -734,7 +734,7 @@ class Manager {
734
  $statuses[ $_status ] = $_license->getStatus();
735
  $statuses[ $_expires ] = $_license->getExpiry();
736
  }
737
- update_option( self::DB_LICENSE_STATUSES_OPTION_NAME, $statuses );
738
 
739
  return $this;
740
  }
@@ -746,7 +746,7 @@ class Manager {
746
  * @return array
747
  */
748
  public function getLicenseKeysDbOption() {
749
- return get_option( $this->getLicenseKeysOptionName(), array() );
750
  }
751
 
752
 
@@ -756,7 +756,7 @@ class Manager {
756
  * @return array
757
  */
758
  public function getLicenseStatusesDbOption() {
759
- return get_option( $this->getLicenseStatusesOptionName(), array() );
760
  }
761
 
762
 
@@ -803,6 +803,65 @@ class Manager {
803
  return $this->_licenseStatusesOptionName;
804
  }
805
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
806
 
807
  /**
808
  * Normalizes the given db options into a format that the Manager can use to compile a list of License instances.
717
  $_key = sprintf( self::DB_LICENSE_KEYS_OPTION_PATTERN, $_addonId );
718
  $keys[ $_key ] = $_license->getKey();
719
  }
720
+ static::_updateOption( self::DB_LICENSE_KEYS_OPTION_NAME, $keys );
721
 
722
  return $this;
723
  }
734
  $statuses[ $_status ] = $_license->getStatus();
735
  $statuses[ $_expires ] = $_license->getExpiry();
736
  }
737
+ static::_updateOption( self::DB_LICENSE_STATUSES_OPTION_NAME, $statuses );
738
 
739
  return $this;
740
  }
746
  * @return array
747
  */
748
  public function getLicenseKeysDbOption() {
749
+ return self::_getOption( $this->getLicenseKeysOptionName(), array() );
750
  }
751
 
752
 
756
  * @return array
757
  */
758
  public function getLicenseStatusesDbOption() {
759
+ return self::_getOption( $this->getLicenseStatusesOptionName(), array() );
760
  }
761
 
762
 
803
  return $this->_licenseStatusesOptionName;
804
  }
805
 
806
+ /**
807
+ * Retrieves the value for an option from the database.
808
+ *
809
+ * @since 4.17.5
810
+ *
811
+ * @param string $name The name of the option to retrieve.
812
+ * @param mixed $default Optional default value if the option does not exist.
813
+ *
814
+ * @return mixed The value for hte option, or the given $default if the option does not exist.
815
+ */
816
+ protected static function _getOption($name, $default = null) {
817
+ return static::_performOnMainSite(function () use ($name, $default) {
818
+ return get_option($name, $default);
819
+ });
820
+ }
821
+
822
+ /**
823
+ * Updates an option in the database.
824
+ *
825
+ * @since 4.17.5
826
+ *
827
+ * @param string $name The name of the option.
828
+ * @param mixed $value The value to set to the option.
829
+ *
830
+ * @return mixed True on success, false on failure.
831
+ */
832
+ protected static function _updateOption($name, $value) {
833
+ return static::_performOnMainSite(function () use ($name, $value) {
834
+ return update_option($name, $value);
835
+ });
836
+ }
837
+
838
+ /**
839
+ * Runs a function on the main site of a WordPress multi site installation.
840
+ *
841
+ * If the current installation is not a multi-site, the function will run normally.
842
+ *
843
+ * @since 4.17.5
844
+ *
845
+ * @param callable $function The function to run on the main site.
846
+ *
847
+ * @return mixed The return value of the function.
848
+ */
849
+ protected static function _performOnMainSite(callable $function) {
850
+ $mustSwitch = !is_main_site();
851
+
852
+ if ($mustSwitch) {
853
+ switch_to_blog(get_main_site_id());
854
+ }
855
+
856
+ $value = $function();
857
+
858
+ if ($mustSwitch) {
859
+ restore_current_blog();
860
+ }
861
+
862
+ return $value;
863
+ }
864
+
865
 
866
  /**
867
  * Normalizes the given db options into a format that the Manager can use to compile a list of License instances.
includes/admin-intro-page.php CHANGED
@@ -55,8 +55,10 @@ function wprss_render_intro_page()
55
  'feedListUrl' => admin_url('edit.php?post_type=wprss_feed'),
56
  'addOnsUrl' => 'https://www.wprssaggregator.com/plugins/?utm_source=core_plugin&utm_medium=onboarding_wizard&utm_campaign=onboarding_wizard_addons_button&utm_content=addons_button',
57
  'supportUrl' => 'https://www.wprssaggregator.com/contact/?utm_source=core_plugin&utm_medium=onboarding_wizard&utm_campaign=onboarding_wizard_support_link&utm_content=support_link',
58
- 'demoImageUrl' => WPRSS_IMG . 'welcome-page/demo.png',
59
- 'feedbackUrl' => 'https://wordpress.org/support/topic/does-everything-i-need-16/',
 
 
60
  'knowledgeBaseUrl' => 'https://kb.wprssaggregator.com/',
61
  'feedEndpoint' => array(
62
  'url' => admin_url('admin-ajax.php'),
55
  'feedListUrl' => admin_url('edit.php?post_type=wprss_feed'),
56
  'addOnsUrl' => 'https://www.wprssaggregator.com/plugins/?utm_source=core_plugin&utm_medium=onboarding_wizard&utm_campaign=onboarding_wizard_addons_button&utm_content=addons_button',
57
  'supportUrl' => 'https://www.wprssaggregator.com/contact/?utm_source=core_plugin&utm_medium=onboarding_wizard&utm_campaign=onboarding_wizard_support_link&utm_content=support_link',
58
+ 'proPlanUrl' => 'https://www.wprssaggregator.com/pricing/?utm_source=core_plugin&utm_medium=onboarding_wizard&utm_campaign=onboarding_wizard_content_link',
59
+ 'proPlanCtaUrl' => 'https://www.wprssaggregator.com/pricing/?utm_source=core_plugin&utm_medium=onboarding_wizard&utm_campaign=onboarding_wizard_cta_button',
60
+ 'demoImageUrl' => WPRSS_IMG . 'welcome-page/demo.jpg',
61
+ 'caseStudyUrl' => 'https://www.wprssaggregator.com/case-study-personal-finance-blogs-content-curation/?utm_source=core_plugin&utm_medium=onboarding_wizard&utm_campaign=onboarding_wizard_case_study_button',
62
  'knowledgeBaseUrl' => 'https://kb.wprssaggregator.com/',
63
  'feedEndpoint' => array(
64
  'url' => admin_url('admin-ajax.php'),
includes/admin-options.php CHANGED
@@ -68,7 +68,7 @@
68
  'slug' => 'advanced_settings',
69
  );
70
 
71
- if (count(wprss_get_addons()) > 0) {
72
  $tabs[] = array(
73
  'label' => __( 'Licenses', WPRSS_TEXT_DOMAIN ),
74
  'slug' => 'licenses_settings'
@@ -105,7 +105,17 @@
105
  }
106
  elseif ( $show_tabs ) {
107
 
108
- if ( $active_tab === 'licenses_settings' ) {
 
 
 
 
 
 
 
 
 
 
109
  settings_fields( 'wprss_settings_license_keys' );
110
  do_settings_sections( 'wprss_settings_license_keys' );
111
  }
68
  'slug' => 'advanced_settings',
69
  );
70
 
71
+ if (count(wprss_get_addons()) > 0 && is_main_site()) {
72
  $tabs[] = array(
73
  'label' => __( 'Licenses', WPRSS_TEXT_DOMAIN ),
74
  'slug' => 'licenses_settings'
105
  }
106
  elseif ( $show_tabs ) {
107
 
108
+ if ( $active_tab === 'licenses_settings') {
109
+
110
+ if (!is_main_site()) {
111
+ printf(
112
+ '<p><strong>%s</strong></p>',
113
+ __('You do not have access to this page', 'wprss')
114
+ );
115
+
116
+ return;
117
+ }
118
+
119
  settings_fields( 'wprss_settings_license_keys' );
120
  do_settings_sections( 'wprss_settings_license_keys' );
121
  }
includes/admin-update-page.php CHANGED
@@ -77,7 +77,8 @@ function wprss_get_update_page_url()
77
  */
78
  function wprss_should_do_update_page()
79
  {
80
- return !wprss_is_new_user() && current_user_can('manage_options') && wprss_user_had_previous_version();
 
81
  }
82
 
83
  /**
77
  */
78
  function wprss_should_do_update_page()
79
  {
80
+ // Temporarily disabled
81
+ return false && !wprss_is_new_user() && current_user_can('manage_options') && wprss_user_had_previous_version();
82
  }
83
 
84
  /**
includes/feed-importing.php CHANGED
@@ -1029,7 +1029,7 @@ function wprss_get_feed_cache_dir()
1029
  *
1030
  * @param string $url The URL to parse.
1031
  *
1032
- * @return string
1033
  */
1034
  function wpra_parse_url($url)
1035
  {
1029
  *
1030
  * @param string $url The URL to parse.
1031
  *
1032
+ * @return array
1033
  */
1034
  function wpra_parse_url($url)
1035
  {
js/build/intro.min.js CHANGED
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.WPRA=t():e.WPRA=t()}("undefined"!=typeof self?self:this,function(){return webpackJsonpWPRA([2],{16:function(e,t,i){"use strict";function s(e,t){for(var i=(arguments.length>2&&void 0!==arguments[2]&&arguments[2],new FormData),s=Object.keys(t),n=Array.isArray(s),r=0,s=n?s:s[Symbol.iterator]();;){var a;if(n){if(r>=s.length)break;a=s[r++]}else{if(r=s.next(),r.done)break;a=r.value}var o=a;i.set(o,t[o])}return fetch(e,{method:"post",body:i}).then(function(e){return e.json()}).then(function(e){if(200!==e.status)throw e;return e})}Object.defineProperty(t,"__esModule",{value:!0});var n=i(4),r=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"wizard-holder animated fadeIn"},[i("div",{staticClass:"connect-steps"},[i("div",{staticClass:"step-items"},[i("div",{staticClass:"step-progress",class:"step-progress--"+e.activeScreenIndex}),e._v(" "),e._l(e.screens,function(t,s){return i("div",{staticClass:"step-item",class:{"step-item_active":e.active(t.id),"step-item_completed":t.completed()&&s<e.activeScreenIndex}},[i("div",{staticClass:"step-item__status"},[t.completed()&&s<e.activeScreenIndex?i("span",{staticClass:"dashicons dashicons-yes"}):e._e()]),e._v(" "),i("div",{staticClass:"step-item__info"},[i("div",{staticClass:"step-item__title"},[e._v(e._s(t.title))]),e._v(" "),t.description?i("div",{staticClass:"step-item__description"},[e._v(e._s(t.description))]):e._e()])])})],2)]),e._v(" "),i("div",{staticClass:"wizard"},[i("transition",{attrs:{name:e.transition,mode:"out-in"}},[e.active("feed")?i("div",{key:e.activeScreen,staticClass:"wizard_content"},[i("div",{staticClass:"wizard_hello"},[e._v("\n Enter your first RSS Feed URL\n ")]),e._v(" "),i("form",{staticClass:"wizard_info",attrs:{id:"feedForm"},on:{submit:function(t){return t.preventDefault(),e.next(t)}}},[i("div",{staticClass:"form-group"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.form.feedSourceUrl,expression:"form.feedSourceUrl"}],staticClass:"wpra-feed-input",attrs:{type:"text",placeholder:"https://www.sourcedomain.com/feed/"},domProps:{value:e.form.feedSourceUrl},on:{input:function(t){t.target.composing||e.$set(e.form,"feedSourceUrl",t.target.value)}}}),e._v(" "),e.isFeedError?i("span",{staticClass:"dashicons dashicons-warning warning-icon"}):e._e(),e._v(" "),e.isFeedError?i("a",{attrs:{href:e.validateLink,target:"_blank"}},[e._v("Validate feed")]):e._e()])]),e._v(" "),e.isFeedError?i("div",{staticClass:"wizard_error"},[i("p",[e._v("This RSS feed URL appears to be invalid. Here are a couple of things you can try:")]),e._v(" "),i("ol",[i("li",[e._v('Check whether the URL you entered is the correct one by trying one of the options when clicking on "How do I find an RSS feed URL?" below.')]),e._v(" "),i("li",[e._v("\n Test out this other RSS feed URL to make sure the plugin is working correctly - https://www.wpmayor.com/feed/ - If it works, you may "),i("a",{attrs:{href:e.supportUrl,target:"_blank"}},[e._v("contact us here")]),e._v(" to help you with your source.\n ")]),e._v(" "),i("li",[e._v("Test the URL's validity by W3C standards, the standards we use in our plugins, using the “Validate feed” link above.")])])]):e._e(),e._v(" "),i("expander",{attrs:{title:"How do I find an RSS feed URL?"}},[i("p",[e._v("WP RSS Aggregator fetches feed items through RSS feeds. Almost every website in the world provides an RSS feed. Here's how to find it:")]),e._v(" "),i("p",[e._v("Option 1: Add /feed to the website's homepage URL ")]),e._v(" "),i("p",[e._v("Many sites have their RSS feed at the same URL. For instance, if the website's URL is www.thiswebsite.com, then the RSS feed could be at www.thiswebsite.com/feed.")]),e._v(" "),i("p",[e._v("Option 2: Look for the RSS share icon")]),e._v(" "),i("p",[e._v("Many websites have share icons on their pages for Facebook, Twitter and more. Many times, there will also be an orange RSS icon. Click on that to access the RSS feed URL.")]),e._v(" "),i("p",[e._v("Option 3: Browser RSS Auto-Discovery")]),e._v(" "),i("p",[e._v("Most browsers either include an RSS auto-discovery tool by default or they allow you to add extensions for it. Firefox shows an RSS icon above the website, in the address bar, which you can click on directly. Chrome offers extensions such as this one.")]),e._v(" "),i("p",[e._v("Option 4: Look at the Page Source")]),e._v(" "),i("p",[e._v('When on any page of the website you\'re looking to import feed items from, right click and press "View Page Source". Once the new window opens, use the “Find” feature (Ctrl-F on PC, Command-F on Mac) and search for " RSS". This should take you to a line that reads like this (or similar):')]),e._v(" "),i("p",[i("code",[e._v('\n <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="https://www.sourcedomain.com/feed/" />\n ')])]),e._v(" "),i("p",[e._v("The RSS feed’s URL is found between the quotes after href=. In the above case, it would be https://www.sourcedomain.com/feed/.")]),e._v(" "),i("p",[i("a",{attrs:{href:e.knowledgeBaseUrl,target:"_blank"}},[e._v("Browse our Knowledge Base for more information.")])])])],1):e._e(),e._v(" "),e.active("feedItems")?i("div",{key:e.activeScreen,staticClass:"wizard_content"},[i("div",{staticClass:"wizard_hello"},[e._v("\n Latest feed items from your selected feed source:\n ")]),e._v(" "),i("div",{staticClass:"wpra-feed-items"},e._l(e.feed.items,function(t){return i("div",{staticClass:"wpra-feed-item"},[i("div",{staticClass:"wpra-feed-item__link"},[i("a",{attrs:{href:t.permalink,target:"_blank"}},[e._v(e._s(t.title))])]),e._v(" "),i("div",{staticClass:"wpra-feed-item__info"},[t.date||t.author?[t.date?[e._v("\n Published on "+e._s(t.date)+"\n ")]:e._e(),e._v(" "),t.date&&t.author?[e._v("|")]:e._e(),e._v(" "),t.author?[e._v("\n By "+e._s(t.author)+"\n ")]:e._e()]:e._e()],2)])}),0),e._v(" "),i("div",{staticClass:"wrpa-shortcode"},[i("div",{staticClass:"wrpa-shortcode-preview"},[i("div",{staticClass:"wrpa-shortcode-label"},[e._v("\n Create a draft page to preview these feed items on your site:\n ")]),e._v(" "),i("a",{staticClass:"button",class:{"button-primary":e.isPrepared,"loading-button":e.isPreparing},attrs:{href:e.previewUrl,target:"_blank"},on:{click:e.preparePreview}},[e._v("\n "+e._s(e.isPrepared?"Preview the Page":"Create Draft Page")+"\n ")])]),e._v(" "),i("div",{staticClass:"wrpa-shortcode-form",on:{click:function(t){e.copyToClipboard()}}},[i("div",{staticClass:"wrpa-shortcode-label"},[e._v("\n Copy the shortcode to any page or post on your site:\n ")]),e._v(" "),i("input",{ref:"selected",staticClass:"wrpa-shortcode-form__shortcode",attrs:{type:"text",readonly:"",value:"[wp-rss-aggregator]"}}),e._v(" "),i("div",{staticClass:"wrpa-shortcode-form__button"},[e._v("\n "+e._s(e.isCopied?"Copied!":"Click to copy")+"\n ")])])])]):e._e(),e._v(" "),e.active("finish")?i("div",{key:e.activeScreen,staticClass:"wizard_content"},[i("div",{staticClass:"wizard_hello"},[e._v("\n You’ve successfully set up your first feed source 😄\n ")]),e._v(" "),i("div",{staticClass:"wpra-cols-title"},[e._v("\n Do more with WP RSS Aggregator - here is what we did at CryptoHeadlines.com.\n ")]),e._v(" "),i("div",{staticClass:"wpra-cols"},[i("div",{staticClass:"col"},[i("p",[e._v("CryptoHeadlines.com displays latest news, Youtube videos, podcasts, jobs and more from the Cryptocurrency industry.")]),e._v(" "),i("p",[e._v("It uses Feed to Post to import articles, Youtube videos, and podcast links.")]),e._v(" "),i("p",[e._v("Full Text RSS Feeds is used to fetch the full content of the job listings to present more information to the potential applicant.")]),e._v(" "),i("p",[e._v("Keyword Filtering is used to filter out content that contains profanity and keywords or phrases deemed as inappropriate.")]),e._v(" "),i("div",{staticStyle:{"margin-bottom":".5rem"}},[i("a",{staticClass:"button",attrs:{href:e.addOnsUrl,target:"_blank"}},[e._v("\n Browse Add-ons ⭐️\n ")])]),e._v(" "),i("div",[i("a",{staticStyle:{"font-size":".9em"},attrs:{href:e.supportUrl,target:"_blank"}},[e._v("Contact support for more information.")])])]),e._v(" "),i("div",{staticClass:"col"},[i("img",{staticClass:"img wpra-demo-photo",attrs:{src:e.demoImageUrl}}),e._v(" "),i("div",{staticClass:"wpra-feedback"},[i("div",{staticClass:"wpra-feedback__copy"},[i("div",{staticClass:"wpra-feedback__text"},[e._v("\n This plugin has made my life a lot easier, and the support has been great as well.\n ")]),e._v(" "),i("div",{staticClass:"wpra-feedback__rating"},[i("span",{staticClass:"dashicons dashicons-star-filled"}),e._v(" "),i("span",{staticClass:"dashicons dashicons-star-filled"}),e._v(" "),i("span",{staticClass:"dashicons dashicons-star-filled"}),e._v(" "),i("span",{staticClass:"dashicons dashicons-star-filled"}),e._v(" "),i("span",{staticClass:"dashicons dashicons-star-filled"})]),e._v(" "),i("div",{staticClass:"wpra-feedback__by"},[i("a",{attrs:{href:e.feedbackUrl,target:"_blank"}},[e._v("\n Review by officeinnovator\n ")])])])])])])]):e._e()]),e._v(" "),i("div",{staticClass:"connect-actions pad"},[i("div",{staticClass:"pad-item--grow"},[e.active("finish")?e._e():i("button",{staticClass:"button-clear",on:{click:e.finish}},[e._v("\n Skip the introduction\n ")])]),e._v(" "),i("div",{staticClass:"pad-item--no-shrink"},[e.isBackAvailable?i("button",{staticClass:"button-clear",on:{click:e.back}},[e._v("\n Back\n ")]):e._e(),e._v(" "),i("button",{staticClass:"button button-primary button-large",class:{"loading-button":e.isLoading},on:{click:e.next}},[e._v("\n "+e._s(e.active("finish")?"Continue to Plugin":"Next")+"\n ")])])])],1)])},a=[],o=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"wpra-expander",class:{"wpra-expander--expanded":e.isExpanded}},[i("div",{staticClass:"wpra-expander__title",on:{click:function(t){e.isExpanded=!e.isExpanded}}},[e._v("\n "+e._s(e.title)+"\n "),i("span",{staticClass:"dashicons dashicons-arrow-down-alt2"})]),e._v(" "),i("transition-expand",[e.isExpanded?i("div",[i("div",{staticClass:"wpra-expander__content"},[e._t("default")],2)]):e._e()])],1)},c=[],d=i(5),l={data:function(){return{isExpanded:this.defaultExpanded}},props:{title:{},defaultExpanded:{value:!1}},components:{TransitionExpand:d.a}},u=l,p=i(1),v=Object(p.a)(u,o,c,!1,null,null,null);v.options.__file="Expander.vue";var f=v.exports,h=i(6),_=function(e){return e},m=window.wprssWizardConfig,w={data:function(){var e=this;return{prevHeight:0,screens:[{id:"feed",title:_("Add feed source URL"),description:!1,next:this.submitFeed,completed:function(){return e.feed.items.length},entered:function(){e.focusOnInput("feed")}},{id:"feedItems",title:_("Display feed items"),description:!1,next:this.continueItems,completed:function(){return e.feed.items.length&&e.itemsPassed}},{id:"finish",title:_("Complete introduction"),description:!1,next:this.completeIntroduction,completed:function(){return e.feed.items.length&&e.itemsPassed}}],isCopied:!1,isPreparing:!1,isPrepared:!1,transition:"slide-up",activeScreen:"feed",form:{feedSourceUrl:null},itemsPassed:!1,stepLoading:!1,isLoading:!1,isFeedError:!1,feed:{items:[]},previewUrl:m.previewUrl,addOnsUrl:m.addOnsUrl,supportUrl:m.supportUrl,demoImageUrl:m.demoImageUrl,feedbackUrl:m.feedbackUrl,knowledgeBaseUrl:m.knowledgeBaseUrl}},computed:{validateLink:function(){return"https://validator.w3.org/feed/check.cgi?url="+encodeURI(this.form.feedSourceUrl)},activeScreenIndex:function(){var e=this;return this.screens.findIndex(function(t){return t.id===e.activeScreen})},currentScreen:function(){var e=this;return this.screens.find(function(t){return t.id===e.activeScreen})},actionCompleted:function(){return this.currentScreen.completed()},isBackAvailable:function(){return this.activeScreenIndex>0&&this.activeScreenIndex<this.screens.length}},mounted:function(){this.onScreenEnter()},methods:{preparePreview:function(e){var t=this;if(this.isPreparing)return void e.preventDefault();this.isPrepared||(e.preventDefault(),this.isPreparing=!0,fetch(this.previewUrl).then(function(){t.isPreparing=!1,t.isPrepared=!0}))},submitFeed:function(){var e=this,t=Object.assign(m.feedEndpoint.defaultPayload,{wprss_intro_feed_url:this.form.feedSourceUrl});return this.isLoading=!0,this.isFeedError=!1,s(m.feedEndpoint.url,t).then(function(t){return e.feed.items=t.data.feed_items.slice(0,3),e.isLoading=!1,{}}).catch(function(t){throw e.isLoading=!1,e.isFeedError=!0,t})},continueItems:function(){return this.itemsPassed=!0,Promise.resolve({})},completeIntroduction:function(){return Promise.resolve({})},next:function(){var e=this;this.transition="slide-up";var t=this.currentScreen.next?this.currentScreen.next:function(){return Promise.resolve(!1)};this.stepLoading=!0,t().then(function(t){e.stepLoading=!1},function(e){throw e}).then(function(){var t=e.activeScreenIndex+1;t>=e.screens.length?e.finish():(e.activeScreen=e.screens[t].id,e.onScreenEnter())}).catch(function(e){console.error(e)})},onScreenEnter:function(){var e=this;this.$nextTick(function(){e.currentScreen.entered&&e.currentScreen.entered()})},focusOnInput:function(e){if(!this.$refs[e]||!this.$refs[e].focus)return!1;this.$refs[e].focus()},back:function(){this.transition="slide-down",this.activeScreen=this.screens[this.activeScreenIndex-1].id},finish:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=function(){return window.location.href=m.feedListUrl};if(e)return void(confirm("Are you sure you want to skip the introduction?")&&t());t()},active:function(e){return this.activeScreen===e},copyToClipboard:function(){var e=this;this.isCopied||(Object(h.a)("[wp-rss-aggregator]"),this.isCopied=!0,setTimeout(function(){e.isCopied=!1},1e3))}},components:{Expander:f}},g=w,y=Object(p.a)(g,r,a,!1,null,null,null);y.options.__file="Wizard.vue";var b=y.exports;i(20),i(17),new n.a({el:"#wpra-wizard-app",template:"<Wizard/>",components:{Wizard:b}})},17:function(e,t){},5:function(e,t,i){"use strict";var s={name:"TransitionExpand",functional:!0,render:function(e,t){return e("transition",{props:{name:"expand"},on:{afterEnter:function(e){e.style.height="auto"},enter:function(e){var t=getComputedStyle(e),i=t.width;e.style.width=i,e.style.position="absolute",e.style.visibility="hidden",e.style.height="auto";var s=getComputedStyle(e),n=s.height;e.style.width=null,e.style.position=null,e.style.visibility=null,e.style.height=0,getComputedStyle(e).height,setTimeout(function(){e.style.height=n})},leave:function(e){var t=getComputedStyle(e),i=t.height;e.style.height=i,getComputedStyle(e).height,setTimeout(function(){e.style.height=0})}}},t.children)}},n=s,r=i(1),a=Object(r.a)(n,void 0,void 0,!1,null,null,null);a.options.__file="TransitionExpand.vue",t.a=a.exports},6:function(e,t,i){"use strict";function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!navigator.clipboard)return void n(e,t);navigator.clipboard.writeText(e).then(function(){},function(e){console.error("Async: Could not copy text: ",e)})}t.a=s;var n=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;t=t||document.body.parentElement;var i=document.createElement("textarea");i.value=e;var s=t.scrollTop;document.body.appendChild(i),i.focus(),i.select();try{document.execCommand("copy")}catch(e){console.error("Fallback: Oops, unable to copy",e)}document.body.removeChild(i),t.scrollTop=s}}},[16])});
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.WPRA=t():e.WPRA=t()}("undefined"!=typeof self?self:this,function(){return webpackJsonpWPRA([2],{16:function(e,t,i){"use strict";function n(e,t){for(var i=(arguments.length>2&&void 0!==arguments[2]&&arguments[2],new FormData),n=Object.keys(t),s=Array.isArray(n),r=0,n=s?n:n[Symbol.iterator]();;){var a;if(s){if(r>=n.length)break;a=n[r++]}else{if(r=n.next(),r.done)break;a=r.value}var o=a;i.set(o,t[o])}return fetch(e,{method:"post",body:i}).then(function(e){return e.json()}).then(function(e){if(200!==e.status)throw e;return e})}Object.defineProperty(t,"__esModule",{value:!0});var s=i(4),r=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"wizard-holder animated fadeIn"},[i("div",{staticClass:"connect-steps"},[i("div",{staticClass:"step-items"},[i("div",{staticClass:"step-progress",class:"step-progress--"+e.activeScreenIndex}),e._v(" "),e._l(e.screens,function(t,n){return i("div",{staticClass:"step-item",class:{"step-item_active":e.active(t.id),"step-item_completed":t.completed()&&n<e.activeScreenIndex}},[i("div",{staticClass:"step-item__status"},[t.completed()&&n<e.activeScreenIndex?i("span",{staticClass:"dashicons dashicons-yes"}):e._e()]),e._v(" "),i("div",{staticClass:"step-item__info"},[i("div",{staticClass:"step-item__title"},[e._v(e._s(t.title))]),e._v(" "),t.description?i("div",{staticClass:"step-item__description"},[e._v(e._s(t.description))]):e._e()])])})],2)]),e._v(" "),i("div",{staticClass:"wizard"},[i("transition",{attrs:{name:e.transition,mode:"out-in"}},[e.active("feed")?i("div",{key:e.activeScreen,staticClass:"wizard_content"},[i("div",{staticClass:"wizard_hello"},[e._v("\n Enter your first RSS Feed URL\n ")]),e._v(" "),i("form",{staticClass:"wizard_info",attrs:{id:"feedForm"},on:{submit:function(t){return t.preventDefault(),e.next(t)}}},[i("div",{staticClass:"form-group"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.form.feedSourceUrl,expression:"form.feedSourceUrl"}],staticClass:"wpra-feed-input",attrs:{type:"text",placeholder:"https://www.sourcedomain.com/feed/"},domProps:{value:e.form.feedSourceUrl},on:{input:function(t){t.target.composing||e.$set(e.form,"feedSourceUrl",t.target.value)}}}),e._v(" "),e.isFeedError?i("span",{staticClass:"dashicons dashicons-warning warning-icon"}):e._e(),e._v(" "),e.isFeedError?i("a",{attrs:{href:e.validateLink,target:"_blank"}},[e._v("Validate feed")]):e._e()])]),e._v(" "),e.isFeedError?i("div",{staticClass:"wizard_error"},[i("p",[e._v("This RSS feed URL appears to be invalid. Here are a couple of things you can try:")]),e._v(" "),i("ol",[i("li",[e._v('Check whether the URL you entered is the correct one by trying one of the options when clicking on "How do I find an RSS feed URL?" below.')]),e._v(" "),i("li",[e._v("\n Test out this other RSS feed URL to make sure the plugin is working correctly - https://www.wpmayor.com/feed/ - If it works, you may "),i("a",{attrs:{href:e.supportUrl,target:"_blank"}},[e._v("contact us here")]),e._v(" to help you with your source.\n ")]),e._v(" "),i("li",[e._v("Test the URL's validity by W3C standards, the standards we use in our plugins, using the “Validate feed” link above.")])])]):e._e(),e._v(" "),i("expander",{attrs:{title:"How do I find an RSS feed URL?"}},[i("p",[e._v("WP RSS Aggregator fetches feed items through RSS feeds. Almost every website in the world provides an RSS feed. Here's how to find it:")]),e._v(" "),i("p",[e._v("Option 1: Add /feed to the website's homepage URL ")]),e._v(" "),i("p",[e._v("Many sites have their RSS feed at the same URL. For instance, if the website's URL is www.thiswebsite.com, then the RSS feed could be at www.thiswebsite.com/feed.")]),e._v(" "),i("p",[e._v("Option 2: Look for the RSS share icon")]),e._v(" "),i("p",[e._v("Many websites have share icons on their pages for Facebook, Twitter and more. Many times, there will also be an orange RSS icon. Click on that to access the RSS feed URL.")]),e._v(" "),i("p",[e._v("Option 3: Browser RSS Auto-Discovery")]),e._v(" "),i("p",[e._v("Most browsers either include an RSS auto-discovery tool by default or they allow you to add extensions for it. Firefox shows an RSS icon above the website, in the address bar, which you can click on directly. Chrome offers extensions such as this one.")]),e._v(" "),i("p",[e._v("Option 4: Look at the Page Source")]),e._v(" "),i("p",[e._v('When on any page of the website you\'re looking to import feed items from, right click and press "View Page Source". Once the new window opens, use the “Find” feature (Ctrl-F on PC, Command-F on Mac) and search for " RSS". This should take you to a line that reads like this (or similar):')]),e._v(" "),i("p",[i("code",[e._v('\n <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="https://www.sourcedomain.com/feed/" />\n ')])]),e._v(" "),i("p",[e._v("The RSS feed’s URL is found between the quotes after href=. In the above case, it would be https://www.sourcedomain.com/feed/.")]),e._v(" "),i("p",[i("a",{attrs:{href:e.knowledgeBaseUrl,target:"_blank"}},[e._v("Browse our Knowledge Base for more information.")])])])],1):e._e(),e._v(" "),e.active("feedItems")?i("div",{key:e.activeScreen,staticClass:"wizard_content"},[i("div",{staticClass:"wizard_hello"},[e._v("\n Latest feed items from your selected feed source:\n ")]),e._v(" "),i("div",{staticClass:"wpra-feed-items"},e._l(e.feed.items,function(t){return i("div",{staticClass:"wpra-feed-item"},[i("div",{staticClass:"wpra-feed-item__link"},[i("a",{attrs:{href:t.permalink,target:"_blank"}},[e._v(e._s(t.title))])]),e._v(" "),i("div",{staticClass:"wpra-feed-item__info"},[t.date||t.author?[t.date?[e._v("\n Published on "+e._s(t.date)+"\n ")]:e._e(),e._v(" "),t.date&&t.author?[e._v("|")]:e._e(),e._v(" "),t.author?[e._v("\n By "+e._s(t.author)+"\n ")]:e._e()]:e._e()],2)])}),0),e._v(" "),i("div",{staticClass:"wrpa-shortcode"},[i("div",{staticClass:"wrpa-shortcode-preview"},[i("div",{staticClass:"wrpa-shortcode-label"},[e._v("\n Create a draft page to preview these feed items on your site:\n ")]),e._v(" "),i("a",{staticClass:"button",class:{"button-primary":e.isPrepared,"loading-button":e.isPreparing},attrs:{href:e.previewUrl,target:"_blank"},on:{click:e.preparePreview}},[e._v("\n "+e._s(e.isPrepared?"Preview the Page":"Create Draft Page")+"\n ")])]),e._v(" "),i("div",{staticClass:"wrpa-shortcode-form",on:{click:function(t){e.copyToClipboard()}}},[i("div",{staticClass:"wrpa-shortcode-label"},[e._v("\n Copy the shortcode to any page or post on your site:\n ")]),e._v(" "),i("input",{ref:"selected",staticClass:"wrpa-shortcode-form__shortcode",attrs:{type:"text",readonly:"",value:"[wp-rss-aggregator]"}}),e._v(" "),i("div",{staticClass:"wrpa-shortcode-form__button"},[e._v("\n "+e._s(e.isCopied?"Copied!":"Click to copy")+"\n ")])])])]):e._e(),e._v(" "),e.active("finish")?i("div",{key:e.activeScreen,staticClass:"wizard_content"},[i("div",{staticClass:"wizard_hello"},[e._v("\n That's it! Your first feed source is ready to go.\n ")]),e._v(" "),i("div",{staticClass:"wpra-cols-title"},[e._v("\n Do more with your content. Here's what Erik Tozier is doing on Personal Finance Blogs.\n ")]),e._v(" "),i("div",{staticClass:"wpra-cols"},[i("div",{staticClass:"col"},[i("p",[e._v("\n Erik created Personal Finance Blogs in 2019 and grew it rapidly in just a few months\n purely by curating content from the personal finance space.\n ")]),e._v(" "),i("p",[e._v("\n The flexibility of the "),i("a",{attrs:{href:e.proPlanUrl}},[e._v("WP RSS Aggregator Pro Plan")]),e._v(" gave Erik\n greater visual customization to keep his readers engaged, with Keyword Filtering\n helping to control the quality of the content.\n ")]),e._v(" "),i("p",[e._v('\n Erik was also quoted as saying that "the support has been great", which is something we\n pride ourselves on at WP RSS Aggregator.\n ')]),e._v(" "),i("div",{staticStyle:{"margin-bottom":".5rem"}},[i("a",{staticClass:"button",attrs:{href:e.proPlanCtaUrl,target:"_blank"}},[e._v("\n Check out our Pro Plan\n ")])]),e._v(" "),i("div",[i("a",{staticStyle:{"font-size":".9em"},attrs:{href:e.supportUrl,target:"_blank"}},[e._v("Contact support for more information.")])])]),e._v(" "),i("div",{staticClass:"col"},[i("img",{staticClass:"img wpra-demo-photo",attrs:{src:e.demoImageUrl}}),e._v(" "),i("div",{staticClass:"wpra-feedback"},[i("div",{staticClass:"wpra-feedback__copy"},[i("div",{staticClass:"wpra-feedback__text"},[e._v("\n We’ve seen some strong traffic growth month over month. And so yeah, we’re up to over 10,000 page views a month – which is great for a new blog.\n ")]),e._v(" "),i("div",{staticClass:"wpra-feedback__rating"},[i("span",{staticClass:"dashicons dashicons-star-filled"}),e._v(" "),i("span",{staticClass:"dashicons dashicons-star-filled"}),e._v(" "),i("span",{staticClass:"dashicons dashicons-star-filled"}),e._v(" "),i("span",{staticClass:"dashicons dashicons-star-filled"}),e._v(" "),i("span",{staticClass:"dashicons dashicons-star-filled"})]),e._v(" "),i("div",{staticClass:"wpra-feedback__by"},[i("a",{attrs:{href:e.caseStudyUrl,target:"_blank"}},[e._v("\n Erik Tozier - Read the full case study\n ")])])])])])])]):e._e()]),e._v(" "),i("div",{staticClass:"connect-actions pad"},[i("div",{staticClass:"pad-item--grow"},[e.active("finish")?e._e():i("button",{staticClass:"button-clear",on:{click:e.finish}},[e._v("\n Skip the introduction\n ")])]),e._v(" "),i("div",{staticClass:"pad-item--no-shrink"},[e.isBackAvailable?i("button",{staticClass:"button-clear",on:{click:e.back}},[e._v("\n Back\n ")]):e._e(),e._v(" "),i("button",{staticClass:"button button-primary button-large",class:{"loading-button":e.isLoading},on:{click:e.next}},[e._v("\n "+e._s(e.active("finish")?"Continue to Plugin":"Next")+"\n ")])])])],1)])},a=[],o=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"wpra-expander",class:{"wpra-expander--expanded":e.isExpanded}},[i("div",{staticClass:"wpra-expander__title",on:{click:function(t){e.isExpanded=!e.isExpanded}}},[e._v("\n "+e._s(e.title)+"\n "),i("span",{staticClass:"dashicons dashicons-arrow-down-alt2"})]),e._v(" "),i("transition-expand",[e.isExpanded?i("div",[i("div",{staticClass:"wpra-expander__content"},[e._t("default")],2)]):e._e()])],1)},c=[],d=i(5),l={data:function(){return{isExpanded:this.defaultExpanded}},props:{title:{},defaultExpanded:{value:!1}},components:{TransitionExpand:d.a}},u=l,p=i(1),v=Object(p.a)(u,o,c,!1,null,null,null);v.options.__file="Expander.vue";var h=v.exports,f=i(6),_=function(e){return e},m=window.wprssWizardConfig,w={data:function(){var e=this;return{prevHeight:0,screens:[{id:"feed",title:_("Add feed source URL"),description:!1,next:this.submitFeed,completed:function(){return e.feed.items.length},entered:function(){e.focusOnInput("feed")}},{id:"feedItems",title:_("Display feed items"),description:!1,next:this.continueItems,completed:function(){return e.feed.items.length&&e.itemsPassed}},{id:"finish",title:_("All done!"),description:!1,next:this.completeIntroduction,completed:function(){return e.feed.items.length&&e.itemsPassed}}],isCopied:!1,isPreparing:!1,isPrepared:!1,transition:"slide-up",activeScreen:"feed",form:{feedSourceUrl:null},itemsPassed:!1,stepLoading:!1,isLoading:!1,isFeedError:!1,feed:{items:[]},previewUrl:m.previewUrl,proPlanUrl:m.proPlanUrl,proPlanCtaUrl:m.proPlanCtaUrl,addOnsUrl:m.addOnsUrl,supportUrl:m.supportUrl,demoImageUrl:m.demoImageUrl,caseStudyUrl:m.caseStudyUrl,knowledgeBaseUrl:m.knowledgeBaseUrl}},computed:{validateLink:function(){return"https://validator.w3.org/feed/check.cgi?url="+encodeURI(this.form.feedSourceUrl)},activeScreenIndex:function(){var e=this;return this.screens.findIndex(function(t){return t.id===e.activeScreen})},currentScreen:function(){var e=this;return this.screens.find(function(t){return t.id===e.activeScreen})},actionCompleted:function(){return this.currentScreen.completed()},isBackAvailable:function(){return this.activeScreenIndex>0&&this.activeScreenIndex<this.screens.length}},mounted:function(){this.onScreenEnter()},methods:{preparePreview:function(e){var t=this;if(this.isPreparing)return void e.preventDefault();this.isPrepared||(e.preventDefault(),this.isPreparing=!0,fetch(this.previewUrl).then(function(){t.isPreparing=!1,t.isPrepared=!0}))},submitFeed:function(){var e=this,t=Object.assign(m.feedEndpoint.defaultPayload,{wprss_intro_feed_url:this.form.feedSourceUrl});return this.isLoading=!0,this.isFeedError=!1,n(m.feedEndpoint.url,t).then(function(t){return e.feed.items=t.data.feed_items.slice(0,3),e.isLoading=!1,{}}).catch(function(t){throw e.isLoading=!1,e.isFeedError=!0,t})},continueItems:function(){return this.itemsPassed=!0,Promise.resolve({})},completeIntroduction:function(){return Promise.resolve({})},next:function(){var e=this;this.transition="slide-up";var t=this.currentScreen.next?this.currentScreen.next:function(){return Promise.resolve(!1)};this.stepLoading=!0,t().then(function(t){e.stepLoading=!1},function(e){throw e}).then(function(){var t=e.activeScreenIndex+1;t>=e.screens.length?e.finish():(e.activeScreen=e.screens[t].id,e.onScreenEnter())}).catch(function(e){console.error(e)})},onScreenEnter:function(){var e=this;this.$nextTick(function(){e.currentScreen.entered&&e.currentScreen.entered()})},focusOnInput:function(e){if(!this.$refs[e]||!this.$refs[e].focus)return!1;this.$refs[e].focus()},back:function(){this.transition="slide-down",this.activeScreen=this.screens[this.activeScreenIndex-1].id},finish:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=function(){return window.location.href=m.feedListUrl};if(e)return void(confirm("Are you sure you want to skip the introduction?")&&t());t()},active:function(e){return this.activeScreen===e},copyToClipboard:function(){var e=this;this.isCopied||(Object(f.a)("[wp-rss-aggregator]"),this.isCopied=!0,setTimeout(function(){e.isCopied=!1},1e3))}},components:{Expander:h}},g=w,y=Object(p.a)(g,r,a,!1,null,null,null);y.options.__file="Wizard.vue";var C=y.exports;i(20),i(17),new s.a({el:"#wpra-wizard-app",template:"<Wizard/>",components:{Wizard:C}})},17:function(e,t){},5:function(e,t,i){"use strict";var n={name:"TransitionExpand",functional:!0,render:function(e,t){return e("transition",{props:{name:"expand"},on:{afterEnter:function(e){e.style.height="auto"},enter:function(e){var t=getComputedStyle(e),i=t.width;e.style.width=i,e.style.position="absolute",e.style.visibility="hidden",e.style.height="auto";var n=getComputedStyle(e),s=n.height;e.style.width=null,e.style.position=null,e.style.visibility=null,e.style.height=0,getComputedStyle(e).height,setTimeout(function(){e.style.height=s})},leave:function(e){var t=getComputedStyle(e),i=t.height;e.style.height=i,getComputedStyle(e).height,setTimeout(function(){e.style.height=0})}}},t.children)}},s=n,r=i(1),a=Object(r.a)(s,void 0,void 0,!1,null,null,null);a.options.__file="TransitionExpand.vue",t.a=a.exports},6:function(e,t,i){"use strict";function n(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!navigator.clipboard)return void s(e,t);navigator.clipboard.writeText(e).then(function(){},function(e){console.error("Async: Could not copy text: ",e)})}t.a=n;var s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;t=t||document.body.parentElement;var i=document.createElement("textarea");i.value=e;var n=t.scrollTop;document.body.appendChild(i),i.focus(),i.select();try{document.execCommand("copy")}catch(e){console.error("Fallback: Oops, unable to copy",e)}document.body.removeChild(i),t.scrollTop=n}}},[16])});
readme.txt CHANGED
@@ -1,27 +1,27 @@
1
- === WP RSS Aggregator ===
2
- Contributors: RebelCode, jeangalea, markzahra, Mekku, xedinunknown
3
  Plugin URI: https://www.wprssaggregator.com
4
- Tags: RSS import, RSS aggregator, feed import, content curation, feed to post, news aggregator, autoblog, rss to post, content syndication
5
  Requires at least: 4.0 or higher
6
- Tested up to: 5.3
7
  Requires PHP: 5.4
8
- Stable tag: 4.17.4
9
  License: GPLv3
10
 
11
- The most popular RSS importer for WordPress. Aggregate and curate content from as many RSS feeds as you want while keeping everything organised.
12
 
13
  == Description ==
14
 
15
- WP RSS Aggregator is the original and most comprehensive plugin for importing, merging, and displaying RSS and Atom feeds anywhere on your site within minutes. Set up your feeds and let the plugin do the leg-work.
16
 
17
  == Automatically import RSS feeds & display them on your site ==
18
 
19
- * Import unlimited feeds from an unlimited number of sources.
20
- * Manage all your sources from a single page.
21
- * Set up a schedule to automatically fetch fresh content.
22
- * Customise your [templates](https://kb.wprssaggregator.com/article/457-templates) to blend into your theme.
23
- * Built-in [shortcode](https://kb.wprssaggregator.com/article/54-how-to-use-the-shortcode-to-display-feed-items) and [block](https://kb.wprssaggregator.com/article/454-displaying-imported-items-block-gutenberg) options to display feeds.
24
- * Feed auto-discovery for sources with hard-to-find RSS feeds.
25
  * Import Youtube videos and have them playable on your site.
26
  * Limit the items stored and fetched for improved performance.
27
  * Create a custom RSS feed from imported items to use elsewhere.
@@ -31,7 +31,7 @@ WP RSS Aggregator is the original and most comprehensive plugin for importing, m
31
 
32
  == Who is WP RSS Aggregator for? ==
33
 
34
- Importing and displaying RSS feeds is a powerful tool for many websites.
35
 
36
  * Aggregator or curate news from the top sources in your market or niche to improve your SEO and build a better reputation.
37
  * Show related content from other reputable sites to build a sense of trust with your readers.
@@ -42,11 +42,11 @@ Importing and displaying RSS feeds is a powerful tool for many websites.
42
 
43
  == Real-life case studies ==
44
 
45
- Erik Tozier built up trust and credibility in the personal finance space by curating quality content for his readers, resulting in over 16,000 monthly page views within just 4 months. [Read the full case study](https://www.wprssaggregator.com/case-study-personal-finance-blogs-content-curation/) or watch the video below.
46
 
47
  [youtube https://www.youtube.com/watch?v=6kADte55kcY]
48
 
49
- Ronald Heijnes has created a multilingual community within the WordPress space by aggregating the latest WordPress news from various sources in multiple languages. [Read the full case study](https://www.wprssaggregator.com/case-study-worldofwp-multilingual-news-aggregator/) or watch the video below.
50
 
51
  [youtube https://www.youtube.com/watch?v=wGHNrSrz8BU]
52
 
@@ -57,24 +57,24 @@ Ronald Heijnes has created a multilingual community within the WordPress space b
57
  * [Crypto Headlines](https://cryptoheadlines.com/youtube-videos/)' videos section shares Youtube videos from popular Youtubers in the Crypto space to keep readers informed.
58
  * [Euro Finance Blogs](https://eurofinanceblogs.com/) curates content on investment, personal finance, and early retirement, similar to Erik's story above.
59
 
60
- Browse through our [**Showcase**](https://www.wprssaggregator.com/showcase/) to see how WP RSS Aggregator is being put to great use on a large variety of WordPress sites, from CrossFit to celebrity news, and gaming to government updates.
61
 
62
  == SEO benefits and other perks ==
63
 
64
- By using WP RSS Aggregator you can increase your WordPress site's credibility and improve your SEO by importing full or partial posts, videos, and more with our [premium add-ons](https://www.wprssaggregator.com/pricing/).
65
 
66
  * Become an instant source of quality content.
67
  * Generate lots of new backlinks to your site.
68
  * Enhance your online presence and gain more trust.
69
  * And therefore, boost your SEO!
70
 
71
- Find out more... [**Content curation and SEO: What you need to know**](https://www.wprssaggregator.com/is-content-curation-good-for-seo/)
72
 
73
  *A word of advice: Don't steal other people's work; give credit where it's due. WP RSS Aggregator makes it super easy to automatically link to the original source every single time.*
74
 
75
  == Premium features ==
76
 
77
- WP RSS Aggregator can be extended through its powerful [premium add-ons](https://www.wprssaggregator.com/extensions/) and [discounted plans](https://www.wprssaggregator.com/pricing/).
78
 
79
  * **[Feed to Post](https://www.wprssaggregator.com/extension/feed-to-post/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_f2p_link&utm_content=f2p_link)** is the most powerful add-on available, enabling you to import feeds into WordPress Posts or any other custom post type. It includes options such as automatically assigning a post type, the post status, categories, tags, images, authors, and more.
80
  * **[Full Text RSS Feeds](https://www.wprssaggregator.com/extension/full-text-rss-feeds/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_ftr_link&utm_content=ftr_link)** takes Feed to Post to the next level by connecting it to our premium full text service. This helps bring in content from sources that don't provide it in their RSS feeds. It's especially useful when missing certain important images or other content.
@@ -253,6 +253,19 @@ Our complete Knowledge Base with FAQs can be found [here](https://kb.wprssaggreg
253
 
254
  == Changelog ==
255
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
  = 4.17.4 (2020-03-16) =
257
  **Changed**
258
  - The default template is now created based on type, not slug.
1
+ === WP RSS Aggregator - Automatic and Powerful Content Aggregation and Curation ===
2
+ Contributors: RebelCode, jeangalea, markzahra, Mekku
3
  Plugin URI: https://www.wprssaggregator.com
4
+ Tags: RSS import, RSS aggregator, feed import, content curation, feed to post, news aggregator, autoblog, rss to post, content syndication, feeds, rss feeds, rss importer, feed importer, post importer, news importer
5
  Requires at least: 4.0 or higher
6
+ Tested up to: 5.4
7
  Requires PHP: 5.4
8
+ Stable tag: 4.17.5
9
  License: GPLv3
10
 
11
+ The most popular RSS aggregator for WordPress. Build a news aggregator with content from unlimited sources within minutes. Simple, robust & powerful.
12
 
13
  == Description ==
14
 
15
+ WP RSS Aggregator is the original, most popular, and most robust plugin for importing, merging, and displaying RSS and Atom feeds anywhere on your site within minutes. Set up your feeds and let the plugin do the leg-work.
16
 
17
  == Automatically import RSS feeds & display them on your site ==
18
 
19
+ * Import unlimited content from an unlimited number of sites.
20
+ * Manage all your content sources from a single page.
21
+ * Set each feed source to fetch new content automatically.
22
+ * Customise the [display templates](https://kb.wprssaggregator.com/article/457-templates) to match your website's design.
23
+ * Built-in [shortcode](https://kb.wprssaggregator.com/article/54-how-to-use-the-shortcode-to-display-feed-items) and [Gutenberg block](https://kb.wprssaggregator.com/article/454-displaying-imported-items-block-gutenberg) to display your feeds in seconds.
24
+ * RSS feed auto-discovery for sources with hard-to-find RSS feeds.
25
  * Import Youtube videos and have them playable on your site.
26
  * Limit the items stored and fetched for improved performance.
27
  * Create a custom RSS feed from imported items to use elsewhere.
31
 
32
  == Who is WP RSS Aggregator for? ==
33
 
34
+ Importing and displaying RSS feeds is a powerful tool for many website owners.
35
 
36
  * Aggregator or curate news from the top sources in your market or niche to improve your SEO and build a better reputation.
37
  * Show related content from other reputable sites to build a sense of trust with your readers.
42
 
43
  == Real-life case studies ==
44
 
45
+ Erik Tozier built up trust and credibility in the personal finance space by curating quality content for his readers, resulting in over 16,000 monthly page views within just 4 months. [Read the full case study](https://www.wprssaggregator.com/case-study-personal-finance-blogs-content-curation/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_case_study_pfb) or watch the video below.
46
 
47
  [youtube https://www.youtube.com/watch?v=6kADte55kcY]
48
 
49
+ Ronald Heijnes has created a multilingual community within the WordPress space by aggregating the latest WordPress news from various sources in multiple languages. [Read the full case study](https://www.wprssaggregator.com/case-study-worldofwp-multilingual-news-aggregator/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_case_study_wow) or watch the video below.
50
 
51
  [youtube https://www.youtube.com/watch?v=wGHNrSrz8BU]
52
 
57
  * [Crypto Headlines](https://cryptoheadlines.com/youtube-videos/)' videos section shares Youtube videos from popular Youtubers in the Crypto space to keep readers informed.
58
  * [Euro Finance Blogs](https://eurofinanceblogs.com/) curates content on investment, personal finance, and early retirement, similar to Erik's story above.
59
 
60
+ Browse through our [**Showcase**](https://www.wprssaggregator.com/showcase/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_showcase) to see how WP RSS Aggregator is being put to great use on a large variety of WordPress sites, from CrossFit to celebrity news, and gaming to government updates.
61
 
62
  == SEO benefits and other perks ==
63
 
64
+ By using WP RSS Aggregator you can increase your WordPress site's credibility and improve your SEO by importing full or partial posts, videos, and more with our [premium add-ons](https://www.wprssaggregator.com/pricing/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_seo_benefits).
65
 
66
  * Become an instant source of quality content.
67
  * Generate lots of new backlinks to your site.
68
  * Enhance your online presence and gain more trust.
69
  * And therefore, boost your SEO!
70
 
71
+ Find out more... [**Content curation and SEO: What you need to know**](https://www.wprssaggregator.com/is-content-curation-good-for-seo/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_seo_benefits)
72
 
73
  *A word of advice: Don't steal other people's work; give credit where it's due. WP RSS Aggregator makes it super easy to automatically link to the original source every single time.*
74
 
75
  == Premium features ==
76
 
77
+ WP RSS Aggregator can be extended through its powerful [premium add-ons](https://www.wprssaggregator.com/extensions/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_premium_features) and [discounted plans](https://www.wprssaggregator.com/pricing/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_seo_benefits).
78
 
79
  * **[Feed to Post](https://www.wprssaggregator.com/extension/feed-to-post/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_f2p_link&utm_content=f2p_link)** is the most powerful add-on available, enabling you to import feeds into WordPress Posts or any other custom post type. It includes options such as automatically assigning a post type, the post status, categories, tags, images, authors, and more.
80
  * **[Full Text RSS Feeds](https://www.wprssaggregator.com/extension/full-text-rss-feeds/?utm_source=wordpress-dot-org&utm_medium=readme&utm_campaign=readme_ftr_link&utm_content=ftr_link)** takes Feed to Post to the next level by connecting it to our premium full text service. This helps bring in content from sources that don't provide it in their RSS feeds. It's especially useful when missing certain important images or other content.
253
 
254
  == Changelog ==
255
 
256
+ = 4.17.5 (2020-04-22) =
257
+ **Changed**
258
+ - Now showing a case study of a site using the Pro Plan in the on-boarding wizard.
259
+ - Licenses are now managed by the main site. Child sites do not have access to the licenses page.
260
+
261
+ **Fixed**
262
+ - The custom feed did not include items imported as posts or other post types.
263
+
264
+ **Removed**
265
+ - Temporarily disabled the "What's New" page.
266
+ - Removed the integration with Lorem on the "Help & Support" page.
267
+ - Removed the integration with Lorem on the "More Features" page.
268
+
269
  = 4.17.4 (2020-03-16) =
270
  **Changed**
271
  - The default template is now created based on type, not slug.
src/Modules/CustomFeedModule.php CHANGED
@@ -4,6 +4,7 @@ namespace RebelCode\Wpra\Core\Modules;
4
 
5
  use Psr\Container\ContainerInterface;
6
  use RebelCode\Wpra\Core\Data\ArrayDataSet;
 
7
  use RebelCode\Wpra\Core\Handlers\CustomFeed\RegisterCustomFeedHandler;
8
  use RebelCode\Wpra\Core\Handlers\CustomFeed\RenderCustomFeedHandler;
9
 
@@ -66,6 +67,19 @@ class CustomFeedModule implements ModuleInterface
66
  'custom_feed_url' => 'wprss'
67
  ]);
68
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  /*
70
  * The handler that renders the custom feed.
71
  *
@@ -75,7 +89,7 @@ class CustomFeedModule implements ModuleInterface
75
  $templates = $c->get('wpra/twig/collection');
76
 
77
  return new RenderCustomFeedHandler(
78
- $c->get('wpra/feeds/items/collection'),
79
  $c->get('wpra/custom_feed/settings'),
80
  $templates['custom-feed/main.twig']
81
  );
4
 
5
  use Psr\Container\ContainerInterface;
6
  use RebelCode\Wpra\Core\Data\ArrayDataSet;
7
+ use RebelCode\Wpra\Core\Data\Collections\NullCollection;
8
  use RebelCode\Wpra\Core\Handlers\CustomFeed\RegisterCustomFeedHandler;
9
  use RebelCode\Wpra\Core\Handlers\CustomFeed\RenderCustomFeedHandler;
10
 
67
  'custom_feed_url' => 'wprss'
68
  ]);
69
  },
70
+ /*
71
+ * The collection of items to display in the feed.
72
+ * Attempts to use the imported items collection, if it is available.
73
+ *
74
+ * @since 4.17.5
75
+ */
76
+ 'wpra/custom_feed/items/collection' => function (ContainerInterface $c) {
77
+ if ($c->has('wpra/importer/items/collection')) {
78
+ return $c->get('wpra/importer/items/collection');
79
+ }
80
+
81
+ return new NullCollection();
82
+ },
83
  /*
84
  * The handler that renders the custom feed.
85
  *
89
  $templates = $c->get('wpra/twig/collection');
90
 
91
  return new RenderCustomFeedHandler(
92
+ $c->get('wpra/custom_feed/items/collection'),
93
  $c->get('wpra/custom_feed/settings'),
94
  $templates['custom-feed/main.twig']
95
  );
vendor/composer/autoload_real.php CHANGED
@@ -13,6 +13,9 @@ class ComposerAutoloaderInit46c8b76c439f86ad826af1a4d36b4e60
13
  }
14
  }
15
 
 
 
 
16
  public static function getLoader()
17
  {
18
  if (null !== self::$loader) {
13
  }
14
  }
15
 
16
+ /**
17
+ * @return \Composer\Autoload\ClassLoader
18
+ */
19
  public static function getLoader()
20
  {
21
  if (null !== self::$loader) {
wp-rss-aggregator.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin Name: WP RSS Aggregator
5
  * Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
6
  * Description: Imports and aggregates multiple RSS Feeds.
7
- * Version: 4.17.4
8
  * Author: RebelCode
9
  * Author URI: https://www.wprssaggregator.com
10
  * Text Domain: wprss
@@ -42,7 +42,6 @@ use RebelCode\Wpra\Core\Modules\AssetsModule;
42
  use RebelCode\Wpra\Core\Modules\BlacklistToolModule;
43
  use RebelCode\Wpra\Core\Modules\BulkAddToolModule;
44
  use RebelCode\Wpra\Core\Modules\CoreModule;
45
- use RebelCode\Wpra\Core\Modules\CronsToolModule;
46
  use RebelCode\Wpra\Core\Modules\CustomFeedModule;
47
  use RebelCode\Wpra\Core\Modules\FeedBlacklistModule;
48
  use RebelCode\Wpra\Core\Modules\FeedDisplayModule;
@@ -58,7 +57,6 @@ use RebelCode\Wpra\Core\Modules\ImportExportToolsModule;
58
  use RebelCode\Wpra\Core\Modules\LicensingModule;
59
  use RebelCode\Wpra\Core\Modules\LoggerModule;
60
  use RebelCode\Wpra\Core\Modules\LogsToolModule;
61
- use RebelCode\Wpra\Core\Modules\LoremModule;
62
  use RebelCode\Wpra\Core\Modules\ModuleInterface;
63
  use RebelCode\Wpra\Core\Modules\ParsedownModule;
64
  use RebelCode\Wpra\Core\Modules\PolyLangCompatModule;
@@ -78,7 +76,7 @@ use RebelCode\Wpra\Core\Plugin;
78
 
79
  // Set the version number of the plugin.
80
  if( !defined( 'WPRSS_VERSION' ) )
81
- define( 'WPRSS_VERSION', '4.17.4' );
82
 
83
  if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
84
  define( 'WPRSS_WP_MIN_VERSION', '4.8' );
@@ -407,7 +405,6 @@ function wpra_modules()
407
  'settings' => new SettingsModule(),
408
  'licensing' => new LicensingModule(),
409
  'upsell' => new UpsellModule(),
410
- 'lorem' => new LoremModule(),
411
  'logging' => new LoggerModule(),
412
  'i18n' => new I18nModule(),
413
  'twig' => new TwigModule(),
4
  * Plugin Name: WP RSS Aggregator
5
  * Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
6
  * Description: Imports and aggregates multiple RSS Feeds.
7
+ * Version: 4.17.5
8
  * Author: RebelCode
9
  * Author URI: https://www.wprssaggregator.com
10
  * Text Domain: wprss
42
  use RebelCode\Wpra\Core\Modules\BlacklistToolModule;
43
  use RebelCode\Wpra\Core\Modules\BulkAddToolModule;
44
  use RebelCode\Wpra\Core\Modules\CoreModule;
 
45
  use RebelCode\Wpra\Core\Modules\CustomFeedModule;
46
  use RebelCode\Wpra\Core\Modules\FeedBlacklistModule;
47
  use RebelCode\Wpra\Core\Modules\FeedDisplayModule;
57
  use RebelCode\Wpra\Core\Modules\LicensingModule;
58
  use RebelCode\Wpra\Core\Modules\LoggerModule;
59
  use RebelCode\Wpra\Core\Modules\LogsToolModule;
 
60
  use RebelCode\Wpra\Core\Modules\ModuleInterface;
61
  use RebelCode\Wpra\Core\Modules\ParsedownModule;
62
  use RebelCode\Wpra\Core\Modules\PolyLangCompatModule;
76
 
77
  // Set the version number of the plugin.
78
  if( !defined( 'WPRSS_VERSION' ) )
79
+ define( 'WPRSS_VERSION', '4.17.5' );
80
 
81
  if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
82
  define( 'WPRSS_WP_MIN_VERSION', '4.8' );
405
  'settings' => new SettingsModule(),
406
  'licensing' => new LicensingModule(),
407
  'upsell' => new UpsellModule(),
 
408
  'logging' => new LoggerModule(),
409
  'i18n' => new I18nModule(),
410
  'twig' => new TwigModule(),