A WordPress plugin that automatically posts your blog posts to Threads with smart character limit handling and URL shortening.
- Automatic Posting: Posts to Threads when you publish a new blog post
- Character Limit Handling: Automatically truncates long posts to fit Threads' 500 character limit
- URL Shortening: Uses Bitly to shorten URLs for long posts
- Manual Posting: Post existing blog posts to Threads with one click
- OAuth Integration: Secure authorization flow compliant with Meta's API requirements
- Duplicate Prevention: Tracks which posts have been shared to prevent duplicates
- GDPR Compliance: Includes data deletion endpoints for user privacy
- WordPress 5.0 or higher
- PHP 7.4 or higher
- A Meta for Developers account
- A Threads account
- A Bitly account (optional, for URL shortening)
- Download the plugin files
- Upload the
WordpressToThreadsfolder to your/wp-content/plugins/directory - Activate the plugin through the 'Plugins' menu in WordPress
- The Setup Wizard will launch automatically on first activation — follow the step-by-step guide to connect your accounts
To re-run the wizard later, go to Settings → Threads & X and click Run Setup Wizard.
The setup wizard walks you through everything with screenshots, but here's a summary of what's involved:
▶ Watch the Meta App setup walkthrough video
- Go to Meta for Developers
- Click "My Apps" → "Create App"
- Name your app and click Next
- On the Use cases step, check "Access the Threads API" and click Next
- (Optional) Associate with a business
- Click Next until you reach the Overview, then click "Create App"
- Click Use Cases → Customize
- For threads_content_publish, click + Add
- Click Settings in the left sidebar
- Add these redirect URIs to the corresponding fields:
- Redirect Callback URLs:
https://yourdomain.com/?threads_oauth_action=redirect - Uninstall Callback URL:
https://yourdomain.com/?threads_oauth_action=deauthorize - Delete Callback URL:
https://yourdomain.com/?threads_oauth_action=data_deletion
- Redirect Callback URLs:
Important: For the Redirect Callback URL, you must press Enter after pasting so it converts into a tag with an × to remove it. If it stays as plain text, Meta won't save it.
Replace yourdomain.com with your actual domain.
Before you can authorize, your Threads/Instagram account must be added as a test user on your Meta App and the invite must be accepted:
- In your Meta App, click App Roles in the left sidebar, then click Roles
- Scroll to Test Users and click Add Instagram Test Users
- Search for and add your Threads/Instagram account, then click Submit
- Open the Threads app, go to Settings → Account → Website permissions (or check your notifications) and accept the pending invite
Important: You must accept the invite before attempting authorization. If you skip this step, the OAuth flow will fail with a permission error.
- Copy your Threads App ID and Threads App Secret from the same Settings page
- Enter them in the plugin (via the wizard or Settings → Threads & X)
- Click Authorize with Threads and complete the OAuth flow
- X (Twitter): Enter your API Key and Secret from the X Developer Portal, then authorize
- Bitly: Enter your access token from Bitly's Developer Settings for URL shortening
Once configured, the plugin will automatically post to Threads whenever you publish a new blog post. The plugin will:
- Take your post title and content
- Check if it fits within Threads' 500 character limit
- If too long, truncate the content and add a shortened URL
- Post to your Threads account
- Mark the post as "posted" to prevent duplicates
To post existing blog posts:
- Go to Settings → WordPress to Threads
- Scroll down to Manual Post to Threads
- You'll see a table of your recent posts with their status
- Click Post to Threads next to any unposted content
- Watch for success/error messages
- ✅ Posted: The post has been shared to Threads
- 🟠 Not posted: The post hasn't been shared yet
Threads has a 500 character limit. The plugin handles this intelligently:
- Short posts: Posted as-is with title and content
- Long posts: Content is truncated and a Bitly link is added
- Very long titles: Title is truncated if needed to fit the URL
Example of a truncated post:
My Amazing Blog Post Title
This is the beginning of my blog post content that gets truncated when it's too long...
https://bit.ly/abc123
Enable or disable automatic posting when blog posts are published.
Your App ID from Meta for Developers.
Your App Secret from Meta for Developers (stored securely).
Your numeric Threads user ID (auto-populated during OAuth).
Shows authorization status and provides authorize/deauthorize buttons.
Your Bitly API token for URL shortening (optional).
The plugin creates these endpoints for OAuth compliance:
/?threads_oauth_action=redirect- OAuth callback/?threads_oauth_action=deauthorize- Remove authorization/?threads_oauth_action=data_deletion- GDPR data deletion
Problem: "Failed to authorize" error Solution:
- Check your App ID and App Secret are correct
- Verify redirect URLs are configured in Meta app settings
- Ensure your domain matches exactly (including www/non-www)
Problem: Posts not appearing on Threads Solution:
- Check error logs in WordPress (Tools → Site Health → Info → WordPress Constants → WP_DEBUG_LOG)
- Verify your authorization is still valid
- Try re-authorizing the plugin
Problem: Posts are getting cut off unexpectedly Solution:
- The plugin accounts for URLs in the character count
- Very long titles may be truncated to fit the Bitly link
- Consider shorter, more concise post titles
For issues and feature requests, please check:
- WordPress error logs
- Plugin settings configuration
- OAuth authorization status
The plugin stores:
- Your Threads access token (encrypted)
- Your Threads user ID
- Post metadata indicating what's been shared
- Bitly access token (if provided)
All data can be removed using the deauthorization feature or GDPR endpoints.
- Initial release
- Automatic posting to Threads
- Character limit handling
- URL shortening with Bitly
- Manual posting interface
- OAuth integration
- GDPR compliance
MIT License - see LICENSE file for details