Sample code for 30+ languages & platforms
Zig

WordPress Create Post

See more WordPress Examples

Demonstrates how to create a WordPress post.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    const http = try chilkat.Http.init();
    defer http.deinit();

    // Use your WordPress login, such as "admin", not the application name.
    http.setLogin("wp_username");
    // Use the application password, such as "Nths RwVH eDJ4 weNZ orMN jabq"
    // See WordPress Application Passwords Plugin
    http.setPassword("app_password");
    http.setBasicAuth(true);

    // Note: For this to work, you'll likely need to update your .htaccess file on your WordPress server.
    // Otherwise you'll get this error:
    //
    // 401 : Sorry, you are not allowed to create posts as this user
    //
    // Your default .htaccess file probably looks like this:
    //
    // <IfModule mod_rewrite.c>
    // RewriteEngine On
    // RewriteBase /
    // RewriteRule ^index\.php$ - [L]
    // RewriteCond %{REQUEST_FILENAME} !-f
    // RewriteCond %{REQUEST_FILENAME} !-d
    // RewriteRule . /index.php [L]
    // </IfModule>
    // # END WordPress
    //
    // Add the following line immediately after the "RewriteEngine On" line:    RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
    // Your .htaccess file should look like this after the edit:
    //
    // <IfModule mod_rewrite.c>
    // RewriteEngine On
    // RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
    // RewriteBase /
    // RewriteRule ^index\.php$ - [L]
    // RewriteCond %{REQUEST_FILENAME} !-f
    // RewriteCond %{REQUEST_FILENAME} !-d
    // RewriteRule . /index.php [L]
    // </IfModule>
    // # END WordPress

    const json = try chilkat.JsonObject.init();
    defer json.deinit();
    json.updateString("title", "This is a test post") catch {};
    json.updateString("content", "<p>This is the HTML body of my post</p>") catch {};
    // The status can be "draft" or "publish"
    json.updateString("status", "draft") catch {};

    // Add tags -- but you need to know the ID of an existing tag.
    // See Chilkat's other WordPress example for creating a tag, or getting the ID of an existing tag.
    var tag_idx: i32 = 0;
    json.setI(tag_idx);
    // When Chilkat sees the literal string "[i]" in the JSON path, it replaces the "i" with the value of the "I" property.
    json.updateInt("tags[i]", 56) catch {};
    tag_idx = tag_idx + 1;
    json.setI(tag_idx);
    json.updateInt("tags[i]", 75) catch {};
    // ..

    const resp = try chilkat.HttpResponse.init();
    defer resp.deinit();
    http.httpJson("POST", "https://cknotes.com/wp-json/wp/v2/posts", json, "application/json", resp) catch {
        std.debug.print("{s}\n", .{try http.getLastErrorText(alloc)});
        return;
    };

    if (resp.getStatusCode() != 201) {
        std.debug.print("{s}\n", .{try resp.getBodyStr(alloc)});
        std.debug.print("status code = {d}\n", .{resp.getStatusCode()});
        return;
    }

    const j_resp = try chilkat.JsonObject.init();
    defer j_resp.deinit();
    j_resp.load(try resp.getBodyStr(alloc)) catch {};
    std.debug.print("Post ID = {d}\n", .{j_resp.intOf("id")});
    std.debug.print("Post URL = {s}\n", .{try j_resp.stringOf(alloc, "link")});
}