{"id":371569,"date":"2026-09-28T09:30:21","date_gmt":"2026-09-28T09:30:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/postia\/"},"modified":"2026-09-28T09:23:05","modified_gmt":"2026-09-28T09:23:05","slug":"kvlk-social-media-publisher","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/kvlk-social-media-publisher\/","author":23569363,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.4","stable_tag":"1.3.4","tested":"7.1.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"KVLK Social Media Publisher","header_author":"KVLK Studio","header_description":"Official connector for Postia by KVLK Studio. Publish to this site from Postia, alongside your social channels. Connect the site once, then schedule posts from one place.","assets_banners_color":"0d0d0f","last_updated":"2026-09-28 09:23:05","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/postia.app\/","header_author_uri":"https:\/\/kvlkstudio.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":57,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.4":{"tag":"1.3.4","author":"kvlkstudio","date":"2026-09-28 09:23:05","revision":3716752}},"upgrade_notice":{"1.3.1":"<p>Full multilingual support now available for users worldwide.<\/p>","1.3.0":"<p>Needed for the per-post settings in Postia: format, sticky, discussion, password and private posts.<\/p>","1.2.0":"<p>Needed if you want to delete published posts from inside Postia.<\/p>","1.0.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3717951,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3717951,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3717951,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3717951,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.4"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The connection screen, with the site's tokens and the checks that explain a failing connection.","2":"The activity screen: how many posts arrived, what is still waiting, and a log of what happened.","3":"Settings, where the site decides what it will accept."}},"plugin_section":[],"plugin_tags":[13082,20949,7143,268,154],"plugin_category":[40],"plugin_contributors":[283139],"plugin_business_model":[],"class_list":["post-371569","plugin","type-plugin","status-publish","hentry","plugin_tags-autopost","plugin_tags-crossposting","plugin_tags-publishing","plugin_tags-scheduling","plugin_tags-social-media","plugin_category-calendar-and-events","plugin_contributors-kvlkstudio","plugin_committers-kvlkstudio"],"banners":{"banner":"https:\/\/ps.w.org\/kvlk-social-media-publisher\/assets\/banner-772x250.png?rev=3717951","banner_2x":"https:\/\/ps.w.org\/kvlk-social-media-publisher\/assets\/banner-1544x500.png?rev=3717951","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/kvlk-social-media-publisher\/assets\/icon-128x128.png?rev=3717951","icon_2x":"https:\/\/ps.w.org\/kvlk-social-media-publisher\/assets\/icon-256x256.png?rev=3717951","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Postia is a scheduler for people who post the same thing in several places. This plugin adds your WordPress site to that list, so a post written once can go to your blog and your channels together.<\/p>\n\n<p>The site stays in charge. You choose which post type Postia writes to, whether posts go live or wait as drafts for an editor, and which category they fall into when the app does not say. A switch on the settings screen makes every incoming post a draft no matter what the app asks for.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li>Creates posts from Postia, with a title, formatted content and an excerpt<\/li>\n<li>Uploads the pictures, videos and documents that came with the post, and can set the first picture as the featured image<\/li>\n<li>Puts posts in categories and adds tags<\/li>\n<li>Attributes posts to a chosen author, when the connected user is allowed to write for others<\/li>\n<li>Marks which posts came from Postia, both in the posts list and on its own screen<\/li>\n<li>Keeps a log of what was created, and what failed and why<\/li>\n<li>Shows how many posts arrived, how many are waiting as drafts, and which ones people replied to<\/li>\n<\/ul>\n\n<h4>Connecting<\/h4>\n\n<p>Two ways, and they end in the same place:<\/p>\n\n<ol>\n<li><strong>The button.<\/strong> On the Postia screen, \"Connect to Postia\" hands this site's address and a one-time code to the app, which trades the code for an access token. The code expires in fifteen minutes and works once.<\/li>\n<li><strong>By hand.<\/strong> Create a token on the same screen and paste it into Postia together with the address of this site. Useful for a site behind a login, on a local machine, or anywhere the browser round trip will not work.<\/li>\n<\/ol>\n\n<p>Tokens are stored as hashes, the way passwords are, so the plaintext is shown once and never again. Revoke one at any time; revoking all of them disconnects the site.<\/p>\n\n<h4>Postia the service<\/h4>\n\n<p>This plugin talks to Postia, a hosted service run by KVLK Studio, at <a href=\"https:\/\/my.postia.app\">my.postia.app<\/a>. The service calls this site to create posts, and only with a token you issued. If you enable the publishing relay, this site also sends information about newly published posts back to Postia so it can apply your publishing rules.<\/p>\n\n<p>What crosses the wire is what you would expect \u2014 the post you wrote, its attachments, the categories and tags you picked, and the site's name, icon, timezone and list of categories, tags and authors so the app can offer them while you compose. When the relay is on, the post title, excerpt, permalink, date and featured image URL are sent to Postia. Nothing about your visitors is collected or sent.<\/p>\n\n<p>Terms: <a href=\"https:\/\/postia.app\/terms\">postia.app\/terms<\/a>. Privacy: <a href=\"https:\/\/postia.app\/privacy\">postia.app\/privacy<\/a>.<\/p>\n\n<p>Using the service needs a Postia account. The plugin is free and GPL, and it does nothing without a site of yours to connect it to.<\/p>\n\n<h4>Credits<\/h4>\n\n<p>The admin screens use Nunito by Vernon Adams, Cyreal and Jacques Le Bailly, bundled with the plugin under the SIL Open Font License 1.1 (https:\/\/openfontlicense.org).<\/p>\n\n<h3>Postia the service<\/h3>\n\n<p>This plugin connects your WordPress site to Postia, a hosted publishing and scheduling service operated by KVLK Studio.<\/p>\n\n<p>The plugin communicates with Postia after you connect your site or enable Postia's publishing relay.<\/p>\n\n<p>When you send a post from Postia to WordPress, the post content, excerpt, images, categories and tags are transferred to your site.<\/p>\n\n<p>If you enable the publishing relay, your WordPress site sends information about newly published posts to Postia. This includes the post title, excerpt, permalink, publication date and featured image URL. Postia uses this information to apply the publishing rules configured for your connected social channels.<\/p>\n\n<p>The plugin does not collect visitor analytics or track visitors.<\/p>\n\n<p>Service: https:\/\/my.postia.app\nTerms: https:\/\/postia.app\/terms\nPrivacy: https:\/\/postia.app\/privacy<\/p>\n\n<p>Using the service requires a Postia account.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Open <strong>Postia<\/strong> in the admin menu.<\/li>\n<li>Press <strong>Connect to Postia<\/strong>, or create a token and paste it into the app along with this site's address.<\/li>\n<li>Check the boxes on <strong>Postia \u2192 Settings<\/strong> you want the site to insist on.<\/li>\n<\/ol>\n\n<p>The <strong>Checks<\/strong> panel on the connection screen looks for the handful of things that usually explain a connection that will not work: the REST API being switched off by a security plugin, an uploads folder nothing can write to, a site still on plain HTTP.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20postia%20get%20access%20to%20my%20whole%20site%3F\"><h3>Does Postia get access to my whole site?<\/h3><\/dt>\n<dd><p>No. It acts as one WordPress user, the one connected when the token was made, and only as a writer: it can create posts, upload media, assign categories and tags, and trash posts it created itself. It cannot install, activate or change plugins or themes, manage users, change site settings or edit code, even when the connected user is an administrator \u2014 those capabilities are switched off for every request that comes in with a token. HTML is filtered the way it is for an author. If the connected user cannot publish, posts arrive as pending review instead.<\/p>\n\n<p>The one setting Postia can change is where this site reports newly published posts, and only to an address on postia.app. You can stop that from the connection screen at any time.<\/p><\/dd>\n<dt id=\"can%20i%20make%20sure%20nothing%20goes%20live%20without%20me%3F\"><h3>Can I make sure nothing goes live without me?<\/h3><\/dt>\n<dd><p>Yes. Turn on \"Everything arrives as a draft\" on the settings screen. After that, every post from Postia waits for someone here to publish it, whatever the app asked for.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20connection%20times%20out%20halfway%3F\"><h3>What happens if the connection times out halfway?<\/h3><\/dt>\n<dd><p>Nothing is duplicated. Each post carries its id from Postia, and a repeat of one that already arrived returns the existing post instead of making a second one.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20count%20views%3F\"><h3>Does the plugin count views?<\/h3><\/dt>\n<dd><p>No. Counting views means writing to the database on every page load, which slows a site down and breaks page caching. If you have Jetpack Stats or WP Statistics installed, the activity screen points you there. What this plugin counts is what WordPress already knows: how many posts arrived, how many are waiting, and how many comments they drew.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20use%20the%20button%20to%20connect%3F\"><h3>Do I have to use the button to connect?<\/h3><\/dt>\n<dd><p>No. Create a token by hand and paste it into Postia. That path works for sites the app's browser tab cannot reach \u2014 behind HTTP auth, on a local machine, inside a VPN.<\/p><\/dd>\n<dt id=\"where%20does%20the%20authorization%20header%20go%20on%20my%20host%3F\"><h3>Where does the Authorization header go on my host?<\/h3><\/dt>\n<dd><p>Some Apache and CGI setups drop it before PHP sees it. Postia sends its token in a header of its own as well, so the connection works either way.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>Rename the plugin to KVLK Social Media Publisher for the WordPress.org directory. Nothing changes for connected sites.<\/li>\n<li>Limit tokens to writing: requests from Postia can no longer use any administrator capability of the connected user, and publish notifications can only be sent to Postia.<\/li>\n<li>Bring the admin screens in line with the Postia app: the app icon in the menu and on every screen, and Nunito for headings.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Add translations for 13 languages: German, Spanish, French, Indonesian, Italian, Japanese, Korean, Polish, Portuguese, Russian, Turkish, Ukrainian, and Simplified Chinese.<\/li>\n<li>Improve i18n support with .po and .mo files.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Each post from Postia can now set its format, stick to the front page, open or close comments and pingbacks, carry a password, be published privately, and say whether its first picture becomes the featured image.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Postia can now take a post it published here back down. The post is moved to the trash, not erased, and only posts this plugin created can be removed this way.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Official connector for Postia by KVLK Studio. Publish from Postia alongside your social channels. Connect the site once, then write in one place.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/371569","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=371569"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kvlkstudio"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=371569"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=371569"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=371569"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=371569"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=371569"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=371569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}