Using the plugin
Configuration reference
Two levels of settings control an import: Main Settings are site-wide defaults, and each rule's More Options → Settings modal overrides or extends them for that one feed.
Everything is stored in WordPress options. Nothing is written to custom database tables.
The free and paid builds use the same echo_Main_Settings and echo_rules_list option names. If both are installed on one site they read and write the same configuration, and activating one will not reset settings the other already created.
Admin screens
| Screen | Slug | What it is for |
|---|---|---|
| Main Settings | echo_admin_settings | Master switch, schedule unit, and all global defaults |
| RSS to Post Rules | echo_items_panel | Create, edit, run and delete import rules |
| Post to RSS Rules | echo_rss_generator | Publish your own posts as named custom feeds |
| Crawling Helper | echo_helper | Fetch a page and find the class, ID or XPath of its content |
| Activity & Logging | echo_logs | System info, running rules, log viewer, rule backup/restore |
| Upgrade to Full Version | echo_upgrade | Edition comparison and the WPBay link |
All six require the manage_options capability. The middle four only appear while the master switch is on.
Main Settings
Top of the page
| Setting | Notes |
|---|---|
| Main Switch | Turns the whole plugin on or off. Off hides the other screens and clears the echoaction and echoactionclear cron events. |
| Rule Schedule Unit | Hours (default) or Minutes. Changes how every rule's schedule number is read, and switches the cron interval between hourly and once-a-minute. Existing values are not converted — review them after changing this. |
SimplePie Library Options
- Use Custom SimplePie Instead of the Built-In One — loads the bundled SimplePie 1.8.1 from
res/simplepie/instead of the copy inside WordPress core. Useful when core's parser chokes on a feed. Requires PHP 7.2+ (see Requirements). - Use Custom User Agent In SimplePie — some publishers block the default agent.
- Force Detection of Feeds at The Links You Specify — treat the URL as a feed even if content-type sniffing disagrees.
- Do Not Sanitize/Strip HTML Tags — keep the source markup intact.
- Enable Caching — cache fetched feeds between runs.
- Clear Curl Decoding Value, Feed Custom Tag Names, Feed Item Custom Tag Names, Custom Tag Separator, Custom Attribute Separator — map non-standard XML tags into template shortcodes (
%%custom_yourfield%%).
Post Images Options
Featured-image sourcing and local copying: Try to Get Featured Image from Content, Copy Images From Content Locally, Do Not Copy Featured Image Locally, Verify Featured Images If Not Corrupt, Fix Greek Strings From Image Names, plus featured-image resize width/height/quality and iframe resize dimensions.
Resizing uses res/ImageResize/, which needs the GD extension.
Royalty Free Featured Image Importing Options
Optional API keys for MorgueFile, Pexels, Flickr, Pixabay and Unsplash, used to fetch a free stock image when the source article has none. Each provider has its own filters: image type, orientation, results order, category, min/max dimensions, safe search and language.
Related: Royalty Free Image Attribution Text, which fills the %%royalty_free_image_attribution%% shortcode, and the two fallback switches (Do Not Use Original Image If No Free Image Found, Skip Importing of Article If No Free Image Found).
Leave all of these blank if you do not use stock images.
Generated Custom Feed Options
Link Articles From Generated Feeds Directly to Their Source — applies to the Post-to-RSS feeds described in Post to RSS.
Plugin Options
The operational settings. The ones that matter most:
| Setting | Notes |
|---|---|
| Secret Word Used For Manual/Cron Running | Sets the token for ?run_echo=…. Once saved, the page prints your full trigger URL and a ready-made crontab line. Treat it as a password. |
| Enable XML-RPC Ping to Run Importing for Feeds | Lets a weblogUpdates.ping XML-RPC call run the rule matching the pinged feed URL. |
| Minimum interval between XML-RPC pings | Throttle in seconds; default 3600. Set 0 to disable throttling entirely. |
| Timeout for Rule Running (seconds) | Default 3600. Applied via set_time_limit() — shared hosts often override it. |
| Delay Between Rule Running | Seconds to sleep between rules in a single cron pass; useful on rate-limited hosts. |
| Enable Logging / Enable Detailed Logging | Writes wp-content/echo_info.log. Turn both on before debugging. |
| Automatically Clear Logs After | Schedules the echoactionclear cron event. |
| Respect Robots HTML Header For Crawled Pages | Honour noindex/nofollow directives when fetching full content. |
| Web Proxy Address List / Authentication | Route outbound fetches through a proxy. |
| Search Google Archives When Direct Page Fetching Fails | Fallback content source. |
| Duplicate detection | Do Not Check For Duplicate Posts, Check Duplicate Posts By Title Instead of Source URL, Make Sure No Duplicate Post Titles Are Published. By default the plugin matches on source URL. |
| Draft Posts First, And Publish Them Afterwards | Two-phase publishing, so partially built posts never appear live. |
| Convert Encoding Of Imported Content To UTF-8 | Fixes mojibake from legacy-encoded feeds. |
| Enable Post Auto Deletion Feature | Lets rules delete their own old posts. |
| Show Extended Item Information Metabox in Post | Adds a metabox to imported posts showing the source item's details. |
| Email notifications | Send Rule Running Summary in Email, Send Each Post in Email, Email Address, Send Only A Daily Summary Email. |
Post Content Options
How generated post bodies are assembled: excerpt generation and length, default author ID, category creation behaviour, link handling (Strip Links From…, Open All Links From Post In a New Tab, Add Rel="nofollow", Add Attributes to Internal/External Links, Append This String To All Links From Content, Replace All URLs from Content With This URL), Strip JavaScript From Crawled Content, media handling (Append Media From Feed Enclosure, Add Images From Feeds As Post Attachments, Append To Post Content A Gallery), page screenshot dimensions, the date format for %%item_pub_date%%, and the Conditional Word List behind %%conditional_words%%.
Posting Restrictions Options
Filters that reject a feed item before it becomes a post. If a run reports no change, check here first:
- Minimum / Maximum Title Word Count
- Minimum / Maximum Content Word Count
- Global Required Words List (plus Require Only One Word From The list)
- Global Banned Words List
- Skip Posts With These Words In Their Featured Image Names
- Skip Posts That Do Not Have Images
- Skip Posts Older Than a Selected Date / Skip Posts Newer Than a Selected Date
Text Spinning Options
Spin Text Using Word Synonyms with a confidence level, driven by res/synonyms.dat; Do Not Spin The Title, Do Not Spin These Words, Protected Terms, and credentials for an external premium spinner service.
PhantomJS Settings
For JavaScript-rendered sources: PhantomJS Path On Server, Timeout for PhantomJs Execution, and switches to use PhantomJS or Puppeteer for screenshots (%%item_show_screenshot%%). Both need the binary installed on your own server. The hosted alternative is a full-version feature — see Free vs Paid.
Post Meta Options
A list of Skip Saving … switches that suppress individual post-meta fields the plugin would otherwise store on each generated post. Useful for keeping wp_postmeta small on high-volume imports.
Random Sentence Generator, Custom HTML, Affiliate Keyword Replacer
- Two sentence pools behind
%%random_sentence%%and%%random_sentence2%%, plus a variable list (adjective => clever;interesting;…) they expand from. - Two blocks of arbitrary HTML behind
%%custom_html%%and%%custom_html2%%— the usual place for ad code. - Keyword-to-affiliate-link replacement rules.
Per-rule settings
Each row on RSS to Post Rules has these inline columns:
| Column | Meaning |
|---|---|
| ID | Rule index, used by the log and by the ruleid shortcode attribute |
| RSS Feed URL | Feed URL, or a site URL for autodiscovery |
| Schedule | Interval in hours or minutes, per the global schedule unit |
| Max # Posts | Maximum posts created per run. 0 = unlimited |
| Post Status | Pending, Draft, Published, Private or Trash |
| Item Type | Any registered post type |
| Post Author | A specific user, Random user, or Import feed author |
| More Options | Opens the advanced settings modal |
| Del | Marks the rule for deletion on the next save |
| Active | Unticked rules are skipped by the scheduler |
| Info | Run status icon and the number of items generated so far |
| Actions | Run This Rule Now · Move All Posts To Trash · Duplicate This Rule · Permanently Delete All Posts |
Changes to the table are only persisted when you click Save Settings. New rules can only be added on the last page of the table.
The advanced settings modal
Grouped into six sections:
- Posting Options — categories, tags, comment and pingback status, post format, sticky posts, custom fields, custom taxonomies, WPML language.
- Post Customization Options — the title and content templates. These accept the shortcodes listed below, plus any
%%custom_yourfield%%you defined in Main Settings. - Featured Image Options — where the featured image comes from, whether to skip the first image, Open Graph images, and royalty-free fallbacks.
- Posting Restrictions Options — the same filters as the global ones, scoped to this rule.
- Translation/Spinning Options — per-rule translation (DeepL, Google, Bing) and spinning.
- Miscellaneous Options — full-content extraction (strip by class, ID, XPath or regex), custom user agent, cookies, proxy use, PhantomJS use, canonical handling, and whether to update existing posts.
Template shortcodes
Available in a rule's title, content, tags, custom fields and custom taxonomy templates. Nested shortcodes are supported.
%%item_title%% %%item_description%% %%item_content%%
%%item_content_plain_text%% %%item_url%% %%item_url_domain%%
%%item_pub_date%% %%item_cat%% %%item_tags%%
%%item_random_tag%% %%item_image_URL%% %%item_show_image%%
%%item_screenshot_url%% %%item_show_screenshot%% %%item_read_more_button%%
%%feed_title%% %%feed_description%% %%feed_content%%
%%feed_logo%% %%feed_url%%
%%author%% %%author_link%% %%author_email%%
%%custom_html%% %%custom_html2%%
%%random_sentence%% %%random_sentence2%%
%%conditional_words%% %%royalty_free_image_attribution%%
Options written to the database
| Option | Contents |
|---|---|
echo_Main_Settings | Every global setting |
echo_rules_list | All RSS-to-Post rules |
echo_RSS_Settings | All Post-to-RSS feed definitions |
echo_posts_per_page | Rules-table page size (default 10) |
echo_running_list | Rules currently executing |
echo_schedule_time | Log auto-clear interval currently scheduled |
| Internal state | echo_next_api_page, echo_attach_id, echo_email_content, echo_keyword_list, echo_last_sent_email, echo_rss_user_error, echo_minute_running_unlocked |
Cron hooks
| Hook | Schedule | Purpose |
|---|---|---|
echoaction | hourly or minutely, per the schedule unit | Evaluates every active rule and runs those whose interval has elapsed |
echoactionclear | Per Automatically Clear Logs After | Truncates wp-content/echo_info.log |
Both are cleared on deactivation. The plugin also registers extra cron intervals: minutely (60s), echo_cron (3600s), weekly and monthly.
Filters for developers
// Change where every upgrade link points.
add_filter( 'echo_upgrade_url', function ( $url, $placement ) {
return 'https://example.com/my-landing-page/';
}, 10, 2 );
// Hide the in-dashboard upgrade prompts.
add_filter( 'echo_show_upgrade_prompt', '__return_false' );