Sample code for 30+ languages & platforms
Tcl

WordPress Create Post

See more WordPress Examples

Demonstrates how to create a WordPress post.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

set http [new_CkHttp]

# Use your WordPress login, such as "admin", not the application name.
CkHttp_put_Login $http "wp_username"
# Use the application password, such as "Nths RwVH eDJ4 weNZ orMN jabq"
# See WordPress Application Passwords Plugin
CkHttp_put_Password $http "app_password"
CkHttp_put_BasicAuth $http 1

# 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$ - 
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule . /index.php 
# </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$ - 
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule . /index.php 
# </IfModule>
# # END WordPress

set json [new_CkJsonObject]

CkJsonObject_UpdateString $json "title" "This is a test post"
CkJsonObject_UpdateString $json "content" "<p>This is the HTML body of my post</p>"
# The status can be "draft" or "publish"
CkJsonObject_UpdateString $json "status" "draft"

# 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.
set tagIdx 0
CkJsonObject_put_I $json $tagIdx
# When Chilkat sees the literal string "[i]" in the JSON path, it replaces the "i" with the value of the "I" property.
CkJsonObject_UpdateInt $json "tags[i]" 56
set tagIdx [expr $tagIdx + 1]
CkJsonObject_put_I $json $tagIdx
CkJsonObject_UpdateInt $json "tags[i]" 75
# ..

set resp [new_CkHttpResponse]

set success [CkHttp_HttpJson $http "POST" "https://cknotes.com/wp-json/wp/v2/posts" $json "application/json" $resp]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkHttp $http
    delete_CkJsonObject $json
    delete_CkHttpResponse $resp
    exit
}

if {[CkHttpResponse_get_StatusCode $resp] != 201} then {
    puts [CkHttpResponse_bodyStr $resp]
    puts "status code = [CkHttpResponse_get_StatusCode $resp]"
    delete_CkHttp $http
    delete_CkJsonObject $json
    delete_CkHttpResponse $resp
    exit
}

set jResp [new_CkJsonObject]

CkJsonObject_Load $jResp [CkHttpResponse_bodyStr $resp]
puts "Post ID = [CkJsonObject_IntOf $jResp id]"
puts "Post URL = [CkJsonObject_stringOf $jResp link]"

delete_CkHttp $http
delete_CkJsonObject $json
delete_CkHttpResponse $resp
delete_CkJsonObject $jResp