Sample code for 30+ languages & platforms
PureBasic

WordPress Create Post

See more WordPress Examples

Demonstrates how to create a WordPress post.

Chilkat PureBasic Downloads

PureBasic
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