Tcl
Tcl
WordPress Create Post
See more WordPress Examples
Demonstrates how to create a WordPress post.Chilkat Tcl Downloads
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