PureBasic
PureBasic
WordPress Create Post
See more WordPress Examples
Demonstrates how to create a WordPress post.Chilkat PureBasic Downloads
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Use your WordPress login, such as "admin", not the application name.
CkHttp::setCkLogin(http, "wp_username")
; Use the application password, such as "Nths RwVH eDJ4 weNZ orMN jabq"
; See WordPress Application Passwords Plugin
CkHttp::setCkPassword(http, "app_password")
CkHttp::setCkBasicAuth(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
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckUpdateString(json,"title","This is a test post")
CkJsonObject::ckUpdateString(json,"content","<p>This is the HTML body of my post</p>")
; The status can be "draft" or "publish"
CkJsonObject::ckUpdateString(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.
tagIdx.i = 0
CkJsonObject::setCkI(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::ckUpdateInt(json,"tags[i]",56)
tagIdx = tagIdx + 1
CkJsonObject::setCkI(json, tagIdx)
CkJsonObject::ckUpdateInt(json,"tags[i]",75)
; ..
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpJson(http,"POST","https://cknotes.com/wp-json/wp/v2/posts",json,"application/json",resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkHttp::ckDispose(http)
CkJsonObject::ckDispose(json)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
If CkHttpResponse::ckStatusCode(resp) <> 201
Debug CkHttpResponse::ckBodyStr(resp)
Debug "status code = " + Str(CkHttpResponse::ckStatusCode(resp))
CkHttp::ckDispose(http)
CkJsonObject::ckDispose(json)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
jResp.i = CkJsonObject::ckCreate()
If jResp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckLoad(jResp,CkHttpResponse::ckBodyStr(resp))
Debug "Post ID = " + Str(CkJsonObject::ckIntOf(jResp,"id"))
Debug "Post URL = " + CkJsonObject::ckStringOf(jResp,"link")
CkHttp::ckDispose(http)
CkJsonObject::ckDispose(json)
CkHttpResponse::ckDispose(resp)
CkJsonObject::ckDispose(jResp)
ProcedureReturn
EndProcedure