{"id":302679,"date":"2026-05-01T02:17:07","date_gmt":"2026-05-01T02:17:07","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/shareloom\/"},"modified":"2026-07-15T00:06:31","modified_gmt":"2026-07-15T00:06:31","slug":"calliope-social-publisher","status":"publish","type":"plugin","link":"https:\/\/li.wordpress.org\/plugins\/calliope-social-publisher\/","author":21100331,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.15","stable_tag":"1.4.15","tested":"7.0.1","requires":"6.4","requires_php":"8.0","requires_plugins":null,"header_name":"Social Publisher","header_author":"CalliopeWP","header_description":"Publish WordPress content to multiple social networks with manual publishing, image editing, and Gutenberg auto-post support.","assets_banners_color":"010516","last_updated":"2026-07-15 00:06:31","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/pluginswordpress.calliope.com.ar\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":459,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.25":{"tag":"1.0.25","author":"mairaforesto","date":"2026-05-01 02:15:43"},"1.2":{"tag":"1.2","author":"mairaforesto","date":"2026-05-01 15:45:09"},"1.3.1":{"tag":"1.3.1","author":"mairaforesto","date":"2026-05-12 02:14:54"},"1.3.10":{"tag":"1.3.10","author":"mairaforesto","date":"2026-05-20 00:01:56"},"1.3.11":{"tag":"1.3.11","author":"mairaforesto","date":"2026-05-21 02:22:25"},"1.4":{"tag":"1.4","author":"mairaforesto","date":"2026-05-22 16:19:27"},"1.4.14":{"tag":"1.4.14","author":"mairaforesto","date":"2026-05-26 03:12:03"},"1.4.15":{"tag":"1.4.15","author":"mairaforesto","date":"2026-07-15 00:06:31"}},"upgrade_notice":{"1.4.15":"<p>This update removes incomplete helper references, improves security hardening, completes uninstall cleanup for post metadata, and improves sensitive log redaction.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3608137,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3608137,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3608137,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3608137,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.25","1.2","1.3.1","1.3.10","1.3.11","1.4","1.4.14","1.4.15"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3608137,"resolution":"1","location":"assets","locale":"","width":1180,"height":1000},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3608137,"resolution":"2","location":"assets","locale":"","width":1180,"height":1000},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3608137,"resolution":"3","location":"assets","locale":"","width":1440,"height":1000}},"screenshots":{"1":"Social Publisher dashboard for preparing a manual publication, selecting image options, and choosing destinations.","2":"Connections screen for configuring and reviewing network connection status.","3":"Block editor sidebar for configuring Social Publisher options on an individual post."}},"plugin_section":[],"plugin_tags":[2015,223781,139106,154,1540],"plugin_category":[],"plugin_contributors":[248854],"plugin_business_model":[],"class_list":["post-302679","plugin","type-plugin","status-publish","hentry","plugin_tags-auto-post","plugin_tags-bluesky","plugin_tags-mastodon","plugin_tags-social-media","plugin_tags-social-sharing","plugin_contributors-mairaforesto","plugin_committers-mairaforesto"],"banners":{"banner":"https:\/\/ps.w.org\/calliope-social-publisher\/assets\/banner-772x250.png?rev=3608137","banner_2x":"https:\/\/ps.w.org\/calliope-social-publisher\/assets\/banner-1544x500.png?rev=3608137","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/calliope-social-publisher\/assets\/icon-128x128.png?rev=3608137","icon_2x":"https:\/\/ps.w.org\/calliope-social-publisher\/assets\/icon-256x256.png?rev=3608137","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/calliope-social-publisher\/assets\/screenshot-1.png?rev=3608137","caption":"Social Publisher dashboard for preparing a manual publication, selecting image options, and choosing destinations."},{"src":"https:\/\/ps.w.org\/calliope-social-publisher\/assets\/screenshot-2.png?rev=3608137","caption":"Connections screen for configuring and reviewing network connection status."},{"src":"https:\/\/ps.w.org\/calliope-social-publisher\/assets\/screenshot-3.png?rev=3608137","caption":"Block editor sidebar for configuring Social Publisher options on an individual post."}],"raw_content":"<!--section=description-->\n<p>Social Publisher helps site administrators publish WordPress content to supported social networks from the WordPress dashboard.<\/p>\n\n<p>Connect provider accounts, write a custom message, choose destinations, attach or crop an image, and publish manually. The plugin also includes block editor options for auto-post related workflows.<\/p>\n\n<h4>Supported networks<\/h4>\n\n<ul>\n<li>Bluesky<\/li>\n<li>Mastodon<\/li>\n<li>Tumblr<\/li>\n<li>Pinterest<\/li>\n<li>Threads<\/li>\n<li>Instagram<\/li>\n<li>LinkedIn personal profiles<\/li>\n<li>Blogger<\/li>\n<li>Telegram<\/li>\n<li>Facebook Pages<\/li>\n<\/ul>\n\n<p>Support depends on each provider's account type, app permissions, API access, and review requirements. LinkedIn publishing in this release is limited to personal profiles.<\/p>\n\n<h3>External services<\/h3>\n\n<p>Social Publisher connects to external services only when a site administrator configures a provider, starts authorization, tests a connection, opens a supported public share action, or publishes content.<\/p>\n\n<p>Provider credentials and tokens are stored locally in the WordPress database for the current site. Do not share them. Logs and UI messages are designed not to show full tokens, secrets, authorization codes, passwords, or bearer credentials.<\/p>\n\n<p>No data is sent to a provider unless that integration is configured and used.<\/p>\n\n<h4>Bluesky<\/h4>\n\n<p>Uses Bluesky \/ AT Protocol at https:\/\/bsky.social\/xrpc\/ for authentication, media upload, and post creation. Data may include the configured handle, app password, post text, link, optional image\/media data, and account identifiers.<\/p>\n\n<p>Terms: https:\/\/bsky.social\/about\/support\/tos\nPrivacy policy: https:\/\/bsky.social\/about\/support\/privacy-policy<\/p>\n\n<h4>Mastodon<\/h4>\n\n<p>Uses the administrator-selected public Mastodon server over HTTPS for OAuth\/app registration, account validation, media upload\/status checks, and publishing. Data may include the instance host, callback details, OAuth app data, authorization code, client credentials, access token, status text, link, visibility, and optional media files. Localhost, private\/reserved IPs, ambiguous hosts, and non-HTTPS instance URLs are rejected.<\/p>\n\n<p>Terms\/privacy: each instance publishes its own policies. Example: https:\/\/mastodon.social\/terms and https:\/\/mastodon.social\/privacy-policy<\/p>\n\n<h4>Tumblr<\/h4>\n\n<p>Uses https:\/\/www.tumblr.com\/oauth\/ and https:\/\/api.tumblr.com\/v2\/ for OAuth, blog validation, and publishing. Data may include Consumer Key\/Secret, OAuth verifier\/callback data, token\/secret, blog identifier, title\/text, link, tags, and optional media data.<\/p>\n\n<p>Terms: https:\/\/www.tumblr.com\/policy\/en\/terms-of-service\nPrivacy policy: https:\/\/www.tumblr.com\/privacy\/en<\/p>\n\n<h4>Pinterest<\/h4>\n\n<p>Uses Pinterest OAuth\/API v5 at https:\/\/www.pinterest.com\/oauth\/, https:\/\/api.pinterest.com\/v5\/, and https:\/\/api-sandbox.pinterest.com\/v5\/ when sandbox mode is selected. Data may include App ID\/Secret, callback URL, authorization code, requested scopes, token data, Pin title\/description, destination link, selected board, and optional image URL\/media data.<\/p>\n\n<p>Terms: https:\/\/policy.pinterest.com\/en\/terms-of-service\nDeveloper\/API terms: https:\/\/developers.pinterest.com\/terms\/\nPrivacy policy: https:\/\/policy.pinterest.com\/en\/privacy-policy<\/p>\n\n<h4>Threads<\/h4>\n\n<p>Uses Meta \/ Threads endpoints at https:\/\/threads.net\/oauth\/ and https:\/\/graph.threads.net\/ for OAuth, token exchange\/refresh, account validation, media containers, status checks, and publishing. Data may include App ID\/Secret, callback URL, authorization code, scopes, access token data, post text, link, media URL\/data, container IDs, and account identifier.<\/p>\n\n<p>Meta Platform Terms: https:\/\/developers.facebook.com\/terms\/dfc_platform_terms\/\nThreads API documentation: https:\/\/developers.facebook.com\/docs\/threads\/\nMeta Privacy Policy: https:\/\/www.facebook.com\/privacy\/policy\/<\/p>\n\n<h4>Instagram<\/h4>\n\n<p>Uses Meta \/ Instagram endpoints at https:\/\/www.instagram.com\/oauth\/, https:\/\/api.instagram.com\/oauth\/, and https:\/\/graph.instagram.com\/ for OAuth, token exchange, account validation, media containers, and publishing when permissions allow it. Data may include Client\/App ID\/Secret, callback URL, authorization code, scopes, token data, caption\/text, link when supported, media URL\/data, container IDs, and account identifier.<\/p>\n\n<p>Meta Platform Terms: https:\/\/developers.facebook.com\/terms\/dfc_platform_terms\/\nMeta Privacy Policy: https:\/\/www.facebook.com\/privacy\/policy\/<\/p>\n\n<h4>LinkedIn<\/h4>\n\n<p>Uses LinkedIn OAuth\/API endpoints at https:\/\/www.linkedin.com\/oauth\/v2\/ and https:\/\/api.linkedin.com\/ for OAuth, personal profile detection, validation, image upload preparation\/upload, and publishing to a personal profile. Data may include Client ID\/Secret, callback URL, authorization code, member scopes, token data, personal profile author URN, post text, link, optional image data, upload URL data, and access token. Company pages, business pages, and organization publishing are not documented as stable supported destinations in this release.<\/p>\n\n<p>User Agreement: https:\/\/www.linkedin.com\/legal\/user-agreement\nAPI Terms of Use: https:\/\/legal.linkedin.com\/api-terms-of-use\nPrivacy policy: https:\/\/www.linkedin.com\/legal\/privacy-policy<\/p>\n\n<h4>Blogger \/ Google<\/h4>\n\n<p>Uses Google OAuth and Blogger API at https:\/\/accounts.google.com\/o\/oauth2\/v2\/auth, https:\/\/oauth2.googleapis.com\/token, and https:\/\/www.googleapis.com\/blogger\/v3\/ for OAuth, token refresh, blog selection, tests, and publishing. Data may include Client ID\/Secret, callback URL, authorization code, Blogger scopes, refresh\/access token data, blog ID, post title\/content, and labels when used.<\/p>\n\n<p>Google APIs Terms of Service: https:\/\/developers.google.com\/terms\nGoogle Terms of Service: https:\/\/policies.google.com\/terms\nGoogle Privacy Policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<h4>Telegram<\/h4>\n\n<p>Uses Telegram Bot API at https:\/\/api.telegram.org\/ for bot\/chat validation and publishing. Data may include Bot Token, chat ID, optional message thread\/topic ID, post title\/text, link, hashtags, and optional image URL\/media data.<\/p>\n\n<p>Terms: https:\/\/telegram.org\/tos\nBot API documentation: https:\/\/core.telegram.org\/bots\/api\nPrivacy policy: https:\/\/telegram.org\/privacy<\/p>\n\n<h4>Facebook Pages<\/h4>\n\n<p>Uses Meta \/ Facebook endpoints at https:\/\/www.facebook.com\/v20.0\/dialog\/oauth and https:\/\/graph.facebook.com\/v20.0\/ for OAuth, Page discovery, Page token resolution, tests, diagnostics, publishing, and the optional public Facebook share action. Data may include App ID\/Secret, callback URL, authorization code, scopes, token data, Page identifiers\/names, selected Page token, post message, link, optional media data, and the page URL when using the public share action.<\/p>\n\n<p>Meta Platform Terms: https:\/\/developers.facebook.com\/terms\/dfc_platform_terms\/\nMeta Privacy Policy: https:\/\/www.facebook.com\/privacy\/policy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install the ZIP from <strong>Plugins &gt; Add New<\/strong>.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open <strong>Social Publisher<\/strong> in the WordPress admin area.<\/li>\n<li>Connect only the networks you want to use.<\/li>\n<li>Publish from the Social Publisher screen or configure supported editor options.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20publish%20to%20multiple%20networks%20at%20once%3F\"><h3>Can I publish to multiple networks at once?<\/h3><\/dt>\n<dd><p>Yes. You can select more than one connected network before publishing.<\/p><\/dd>\n<dt id=\"does%20linkedin%20support%20company%20pages%3F\"><h3>Does LinkedIn support company pages?<\/h3><\/dt>\n<dd><p>No. This release documents LinkedIn publishing for personal profiles only.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20store%20tokens%3F\"><h3>Does the plugin store tokens?<\/h3><\/dt>\n<dd><p>Yes. Provider credentials and tokens are stored locally in the WordPress database for the current site. Do not share them. Logs are sanitized so full tokens, secrets, authorization codes, passwords, and bearer credentials are not intentionally stored or shown.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.15<\/h4>\n\n<ul>\n<li>Removed incomplete helper references for product consistency.<\/li>\n<li>Removed the unauthenticated async publish endpoint and kept the browser worker flow authenticated.<\/li>\n<li>Hardened Mastodon instance URL validation against unsafe hosts and non-HTTPS inputs.<\/li>\n<li>Improved uninstall cleanup for Gutenberg and auto-post metadata when cleanup is explicitly enabled.<\/li>\n<li>Improved sensitive data redaction in OAuth\/API logs and reduced raw provider response logging.<\/li>\n<li>Adjusted sensitive and large plugin options to avoid unnecessary autoload where applicable.<\/li>\n<li>Updated WordPress.org documentation consistency for supported networks, external services, and LinkedIn scope.<\/li>\n<\/ul>\n\n<h4>1.4.14<\/h4>\n\n<ul>\n<li>Maintenance release published before this readme changelog was completed.<\/li>\n<li>Current release notes continue in 1.4.15 with the documented WordPress.org preparation changes.<\/li>\n<\/ul>\n\n<h4>1.4.12<\/h4>\n\n<ul>\n<li>Added a visible browser-worker progress panel with progress bar, percentage, current network, and network-by-network status while publishing.<\/li>\n<li>Ran queued manual publications sequentially in the browser to make the waiting state clear and reduce server pressure.<\/li>\n<\/ul>\n\n<h4>1.4.11<\/h4>\n\n<ul>\n<li>Fixed manual publication queue execution by running the queued job from the browser in safe one-network steps.<\/li>\n<li>Prevented hidden delayed duplicate publications by cancelling stale jobs from previous worker versions.<\/li>\n<li>Kept the admin request fast while still publishing immediately after the redirect.<\/li>\n<\/ul>\n\n<p>Older changelog entries are available in <code>changelog.txt<\/code>.<\/p>","raw_excerpt":"Publish WordPress posts to multiple social networks from one simple dashboard.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/302679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=302679"}],"author":[{"embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mairaforesto"}],"wp:attachment":[{"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=302679"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=302679"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=302679"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=302679"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=302679"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/li.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=302679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}