IMPORTANT NOTICE: This project is no longer maintained and has reached a dead end.
The methods used by this plugin to fetch tweets (both from public Nitter instances and the official Twitter Syndication API) have become unreliable and are consistently blocked by advanced bot-detection systems. After extensive efforts to bypass these restrictions, it has become clear that a stable, unauthenticated method for fetching tweets is no longer viable with this approach.
As a result, this plugin is not functional and should not be used.
Thank you to everyone who followed the project's development.
A WordPress plugin that was designed to fetch and display Twitter feeds using public, unauthenticated methods without requiring the X.com API. This plugin no longer works.
- (DEPRECATED) Nitter Integration: Previously fetched tweets from public Nitter instances and the official Twitter Syndication API.
- Hybrid Caching Strategy:
- WordPress transients for fast access
- Database storage for persistent caching
- Configurable cache expiration
- Scheduled Updates: WordPress cron scheduling (hourly, 6-hourly, or daily)
- Admin Settings Panel: Easy configuration via WordPress admin
- Manual Refresh: Fetch tweets immediately from the admin panel
- Responsive Design: Mobile-friendly tweet display
- Error Handling: Graceful fallbacks and comprehensive logging
- Shortcode Support: Easy integration with
[twitter-feed]shortcode
- Upload the plugin folder to
/wp-content/plugins/ - Activate the plugin from the WordPress admin panel
- Go to Settings → Twitter Feed to configure
- Twitter Username: Enter the Twitter account username (without @)
- Number of Tweets: Choose how many tweets to display (1-100)
- Cache Refresh Frequency: Select update interval (hourly, 6-hourly, or daily)
- Nitter Instance URL (optional): Use a custom Nitter instance if needed
The plugin uses https://xcancel.com by default (a stable Nitter fork). If that instance is unavailable in your environment, you can configure an alternative Nitter-compatible instance in the plugin settings (the plugin will also try a small set of built-in fallbacks automatically).
Display tweets on any page or post using the shortcode:
[twitter-feed]
[twitter-feed username="twitter" count="10" cache_refresh="6hours"]
Parameters:
username(string): Twitter username to display tweets fromcount(integer): Number of tweets to show (1-100, default: 10)cache_refresh(string): Cache expiration -hourly,6hours, ordaily
- Fetch: Plugin fetches tweets from Nitter via RSS feed (no API key required)
- Store: Tweets are saved to the database with metadata
- Cache: Tweets are cached in WordPress transients for fast access
- Display: Shortcode retrieves cached or database tweets for display
- Automated cron events run according to configured frequency
- Fetches fresh tweets and updates the cache
- Falls back to cached tweets if Nitter fetch fails
- Comprehensive error logging for troubleshooting
- Nitter Unavailable: Falls back to cached tweets
- Network Issues: Logs errors and preserves last known tweets
- Invalid Configuration: Admin notices alert users to missing settings
- Error Log: Recent errors visible in admin panel
The plugin creates a custom table wp_twitter_feed_tweets with the following fields:
id: Unique record IDtweet_id: Twitter tweet IDusername: Twitter usernametext: Tweet text contentlink: Link to the tweettimestamp: Unix timestamp of tweetpub_date: Publication datedescription: Full tweet descriptionmedia: JSON array of media URLscreated_at: When record was createdupdated_at: When record was last updated
- Speed: Instant access to cached tweets
- Duration: Configurable (1, 6, or 24 hours)
- Fallback: Automatically expires and refreshes
- Persistence: Tweets retained even if transient cache clears
- Backup: Provides fallback if scheduled fetches fail
- Searchable: Can be queried for extended functionality
- Verify the Twitter username is correct in settings
- Check that the Nitter instance is accessible
- Click "Fetch Tweets Now" to trigger manual refresh
- Check the Recent Errors section for details
If you set a custom Nitter URL but it seems to be ignored:
-
Enable WP_DEBUG in
wp-config.php:define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);
-
Check the Debug Info box (appears in admin when WP_DEBUG is enabled):
- Verify "Is Custom URL Set?" shows "YES"
- Verify your URL is listed first with
[PRIMARY]marker - Check "Custom URL Option Value" shows your URL
-
Test Manual Fetch:
- Click "Fetch Tweets Now"
- Check the success message for "Instance Used"
- Open browser console (F12) and look for
[Twitter Feed]logs
-
Review debug.log:
- Located at
wp-content/debug.log - Search for
[Twitter Feed]entries - Look for "Custom Nitter URL configured" and "Trying instance" logs
- Located at
Note: If you see your custom URL in error messages, it means the plugin IS trying it first (as designed), but it's failing. The plugin will automatically try fallback instances if the primary fails.
For detailed debugging guide, see CUSTOM_URL_DEBUG_GUIDE.md and QUICK_DEBUG_REFERENCE.md.
- Ensure WordPress version supports the required PHP version (7.4+)
- Check error logs for database table creation issues
- Verify file permissions in the plugin directory
- WordPress cron relies on site traffic; if traffic is low, consider using a real cron
- To use real cron, add to
wp-config.php:Then add a real cron job to your server:define('DISABLE_WP_CRON', true);
* * * * * curl https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
- WordPress 5.0+
- PHP 7.4+
- cURL or WordPress HTTP functions enabled
- Outbound HTTPS connections allowed
- This plugin does not store any user data
- Tweets are fetched from public Nitter instances
- No tracking or analytics are included
- All data is stored locally in your WordPress database
GPL v2 or later
For issues and feature requests, please visit the plugin repository.
- Initial release
- Nitter RSS feed integration
- WordPress cron scheduling
- Hybrid caching system
- Admin settings panel
- Tweet shortcode
- Error handling and logging