Skip to Content
ConnectionsWordPress

WordPress Integration

Connect your self-hosted WordPress site to publish content generated in Asky directly to your WordPress blog, pages or custom post types, and to refresh existing pages in place.

Publishing to WordPress is available on Scale and above.

What You Get

Connecting WordPress enables:

FeatureDescription
Content PublishingPublish articles and posts directly
Post TypesPosts, pages and your custom post types
Categories & TagsAssign WordPress categories and tags
Featured ImagesAdd a featured image, uploaded to your WordPress media library
Status OptionsPublish or save as draft

Prerequisites

Before connecting, ensure you have:

  • Administrator or Editor access to your WordPress site
  • A self-hosted WordPress site with the REST API enabled

Self-hosted requirements:

  • WordPress 5.6 or higher
  • REST API enabled (enabled by default)
  • HTTPS enabled
  • Application Passwords feature (WordPress 5.6+)

Asky sets up structured data for you when you connect: it installs the free Code Snippets plugin and adds a small snippet that renders JSON-LD on your pages. See Schema.org Structured Data Setup below.

New WordPress.com connections are paused, so new customers connect a self-hosted site. If you already have a WordPress.com connection, it keeps working and stays on your Connections page.

Connecting WordPress

In Asky, click your name at the bottom of the sidebar and choose Connections.

Find WordPress.org

Locate the WordPress.org card. It is the card for self-hosted WordPress.

Click Connect

Click the Connect button.

Authorize Access

Self-hosted WordPress connects via Application Passwords: a token you generate in your WordPress admin and paste into Asky. Asky never sees your real WordPress password.

1. Generate an Application Password in WordPress

  1. In your WordPress admin, go to Users → Profile
  2. Scroll down to the Application Passwords section
  3. Enter a name (for example Asky)
  4. Click Add New Application Password
  5. WordPress shows a one-time string like xxxx xxxx xxxx xxxx xxxx xxxx. Copy it now. You cannot view it again after leaving the page.

2. Fill in the Asky connect form

FieldWhat to enter
Site URLYour site’s full URL with https:// (for example https://yoursite.com), with no trailing slash and no /wp-admin
UsernameYour WordPress login username (the one you use at yoursite.com/wp-admin), not your email
Application PasswordPaste the string from step 1, including spaces (Asky strips them automatically)

Click Connect. You’ll be returned to Asky with WordPress connected.

The user account you generate the Application Password under will be the author of every post Asky publishes. They need Editor or Administrator role.

Application Passwords require WordPress 5.6+ and HTTPS. They will not work on HTTP-only sites.

Complete Setup

Asky tests the connection, then sets up structured data on your site and turns on daily crawler log imports. When the dialog finishes, WordPress is connected.

Schema.org Structured Data Setup

Asky generates JSON-LD structured data for every draft and sends it to a custom post meta field called asky_json_ld on publish. For this schema to actually render as a <script type="application/ld+json"> tag on your live page, WordPress needs a small PHP snippet that registers the meta field with the REST API and outputs it inside <head> on each post.

This is a one-time setup per site. After completing it, every future publish from Asky automatically includes structured data on the live page.

Asky does this for you. When you connect a self-hosted site, Asky installs and activates the Code Snippets plugin and adds a snippet named Asky JSON-LD Schema, all inside the connect dialog. If the setup still needs finishing later, for example because the plugin was deactivated, a draft shows a Set up JSON-LD card: click it and Asky completes the remaining steps.

Your WordPress user needs permission to install and activate plugins for this to work. If it doesn’t have that, Asky tells you and a site administrator can install Code Snippets, or you can follow the manual steps below.

Structured data helps AI search engines (ChatGPT, Perplexity, Gemini, Claude) understand and cite your page correctly. Without this setup, content publishing still works, but your pages render no Asky-generated JSON-LD and miss the added AEO benefit.

The setup below applies to self-hosted WordPress (WordPress.org). WordPress.com customers need to be on a Business or Commerce plan to install plugins. The same snippet works, but lower-tier WordPress.com plans cannot run custom PHP.

Manual setup (fallback)

Use these steps only if the in-app setup could not finish.

Use a snippet plugin (don’t edit functions.php)

Editing functions.php directly is risky for non-technical users; a single syntax error can take the site offline. Instead, install a snippet plugin that runs PHP safely with a UI. We recommend either:

  • Code Snippets  (free, by Code Snippets Pro): the most popular plugin for this use case
  • WPCode  (free, by AwesomeMotive): a modern alternative with similar functionality

If you already have one installed, use it. Otherwise, either is a fine choice. The instructions below use Code Snippets, but WPCode follows the same flow.

Install Code Snippets

  1. In your WordPress admin, go to Plugins → Add Plugin
  2. Search for Code Snippets
  3. Install and activate the plugin by Code Snippets Pro (free version is sufficient)

WordPress plugin browser with the Code Snippets plugin shown in search results

Open the Snippets menu

In the WordPress admin sidebar, open Snippets → All Snippets.

WordPress admin sidebar with the Snippets menu opened to All Snippets

Click Add New

At the top of the All Snippets page, click the Add New button.

All Snippets page with the Add New button highlighted

Choose the PHP / Functions snippet type

On the Add New Snippet screen, confirm the snippet type is set to PHP / Functions (the default). If you need to change it, click the type selector in the top-right of the title field.

Add New Snippet form with the snippet type selector showing PHP / Functions, HTML, CSS, JS options

Name, paste, and activate

  1. Name: enter Asky JSON-LD Schema
  2. Snippet Content: paste the code below into the editor (do not include the <?php opening tag, Code Snippets adds it automatically)
  3. Location (right sidebar): leave as Run everywhere
  4. Conditions: none needed. The snippet itself only runs on singular posts that have schema attached
  5. Click Save and Activate
// 1. Register asky_json_ld so the WordPress REST API accepts it from Asky add_action( 'init', function() { register_post_meta( '', 'asky_json_ld', array( 'show_in_rest' => true, 'single' => true, 'type' => 'string', 'auth_callback' => function() { return current_user_can( 'edit_posts' ); }, ) ); } ); // 2. Render the JSON-LD on the live page inside <head> add_action( 'wp_head', function() { if ( ! is_singular() ) { return; } $raw = get_post_meta( get_the_ID(), 'asky_json_ld', true ); if ( empty( $raw ) ) { return; } $decoded = json_decode( $raw ); if ( $decoded === null ) { return; } echo "\n<script type=\"application/ld+json\" class=\"asky-schema\">" . wp_json_encode( $decoded ) . "</script>\n"; }, 20 );

The first block tells WordPress’s REST API to accept asky_json_ld as valid post meta. Without this, WordPress silently drops the value when Asky publishes. The second block outputs it as a valid <script> tag on every singular post or page that has schema attached. The tag includes class="asky-schema" so you can easily identify it in the page source and distinguish it from any JSON-LD added by SEO plugins.

Completed snippet with name "Asky JSON-LD Schema", PHP code pasted, Location set to "Run everywhere", and the Save and Activate button highlighted

Verify it’s working

  1. Publish any content draft from Asky to this WordPress site
  2. Open the published post in WordPress admin and click Preview (or open the live URL if published)
  3. View the page source (Ctrl/Cmd + U) and search for asky-schema
  4. You should see a populated <script type="application/ld+json" class="asky-schema"> block containing the article’s JSON-LD

If your site uses an SEO plugin like Yoast or RankMath, you may see two JSON-LD blocks on the page: one from the SEO plugin (typically with class="yoast-schema-graph" or similar) and one from Asky (with class="asky-schema"). This is expected and valid. Google and AI crawlers handle multiple JSON-LD blocks correctly. Asky’s block adds types your SEO plugin may not generate automatically (for example FAQPage and HowTo).

Paste the live URL into Google’s Rich Results Test  to confirm the schema parses cleanly and Google recognizes the types.

Troubleshooting

The <script> tag doesn’t appear on the live page:

  1. Confirm the snippet is Active in Snippets → All Snippets (green toggle)
  2. Verify the snippet’s location is set to Run snippet everywhere
  3. Open the post in the WordPress admin, scroll down to Custom Fields (enable via Screen Options if hidden), and check whether a field named asky_json_ld exists. If missing, the REST API rejected the value. Re-publish from Asky after activating the snippet.
  4. Re-publish the draft from Content in Asky, then reload the page

The <script> tag is there but empty:

  1. The draft you published didn’t have schema attached. Open the draft in Asky and review the Schema.org preview before publishing again.

Articles published before this setup don’t have schema:

  1. Complete the setup, then republish those drafts from Content. New publishes include structured data automatically.

My SEO plugin already adds JSON-LD, do I need this?

  1. Asky’s schema is complementary to plugins like Yoast or RankMath. Asky generates richer types based on your article content (for example FAQPage for articles with Q&A sections and HowTo for instructional content) that most SEO plugins don’t auto-generate. Both can coexist.

Publishing Content

From Content

To publish content to WordPress:

Select Content

  1. Go to Content in the sidebar
  2. Click on the content you want to publish

Verify Content Status

Ensure content is in “Ready” status. Edit if needed.

Click Publish

Click the Publish button.

Select Destination

Choose WordPress as the destination.

Configure Options

Set publishing options:

Post Type:

  • Post: Standard blog post
  • Page: Static page
  • Custom post types: Any editorial post type your site registers, such as case studies or guides

Status:

  • Publish: Goes live immediately
  • Draft: Saved as draft for review

Categories (for posts):

  • Select from existing categories
  • Or leave uncategorized

Tags (for posts):

  • Add relevant tags
  • Separate multiple tags with commas

Featured Image:

  • Add a featured image, which Asky uploads to your WordPress media library

Confirm and Publish

Click Publish to send content to WordPress.

Tracking Status

After publishing:

  • Content status changes to “Publishing”
  • Status updates to “Published” when complete
  • Link to WordPress post is provided
  • Any errors are displayed with details

Viewing on WordPress

Published content appears in your WordPress admin:

  1. Log in to WordPress
  2. Go to Posts or Pages
  3. Find your newly published content

Content Formatting

What Gets Published

Asky ContentWordPress Equivalent
TitlePost/Page title
BodyPost/Page content
SummaryExcerpt (if available)
SlugPost slug/permalink

Formatting Support

Asky content supports:

  • Headings (H1-H6)
  • Bold and italic text
  • Bulleted and numbered lists
  • Links
  • Block quotes
  • Code blocks

HTML Handling

Content is converted to clean HTML compatible with:

  • WordPress Classic Editor
  • Block Editor (Gutenberg)
  • Most WordPress themes

Managing the Connection

Viewing Status

The connection card shows:

  • Connection status (Connected, Expired, Error)
  • Connected WordPress account
  • Selected site
  • Last publish time

Switching Sites

To publish to a different site:

  1. Click your name at the bottom of the sidebar and choose Connections
  2. Find WordPress
  3. Click Change Site
  4. Select new site

Disconnecting

To disconnect WordPress:

  1. Click your name at the bottom of the sidebar and choose Connections
  2. Find WordPress
  3. Click Disconnect
  4. Confirm

Disconnecting:

  • Stops ability to publish new content
  • Does not delete content already in WordPress
  • Can be reconnected anytime

Revoking Access

You can also revoke access from WordPress:

Self-hosted:

  1. Go to your WordPress admin
  2. Navigate to Users → Your Profile
  3. Find Application Passwords
  4. Revoke Asky’s password

WordPress.com (existing connections):

  1. Go to WordPress.com 
  2. Navigate to Me → Account Settings → Connected Apps
  3. Find Asky and click Disconnect

Troubleshooting

Connection Failed

“Authorization Failed”:

  1. Verify you’re logging into the correct WordPress account
  2. Check you have Editor or Administrator access
  3. For self-hosted: ensure REST API is enabled
  4. Try disconnecting and reconnecting
  5. If Wordfence is installed on the site, see Wordfence blocks the connection below

“Site Not Found”:

  1. Verify the site URL is correct
  2. Check site is accessible
  3. For self-hosted: ensure REST API isn’t blocked

Wordfence blocks the connection

Wordfence’s Login Security module turns off WordPress Application Passwords by default. With that setting on, every request Asky makes with your Application Password is treated as a logged-out visitor: connecting fails with an authorization error, and a connection that used to work starts failing the moment Wordfence is installed.

  1. In your WordPress admin, go to Wordfence → Login Security → Settings
  2. Uncheck Disable WordPress application passwords
  3. Click Save
  4. Back in Asky, try the connection again, or click Reconnect if it shows as failed

Your Application Password itself is unaffected, so there is no need to generate a new one. Wordfence’s firewall and login rate limiting can stay on.

Bot protection blocks reads or updates

Some hosts put bot protection in front of the whole site, including the WordPress REST API that Asky reads and updates your pages through. SiteGround’s Anti-Bot AI and Cloudflare’s bot challenges are the common ones. When it answers instead of WordPress, Asky retries from its fixed address, 77.83.51.191. If that is blocked too, Asky says what happened: either nothing was changed, or the update may not have been saved and should be checked in WordPress before you try again. A refresh that could not read the page shows its changes to copy across by hand instead of updating it in place: open Changes above the article to see the original page beside the refreshed version, copy each change as formatted text, HTML, plain text or Markdown, then click Mark as published.

To stop it happening, allow the address:

  1. SiteGround: open a support ticket and ask them to exempt 77.83.51.191 from the Anti-Bot AI for your site, not only from the Blocked Traffic list
  2. Cloudflare: add an IP Access rule for 77.83.51.191 with the action Allow, under Security, WAF, Tools. Bot Fight Mode cannot be skipped by a custom rule, but it does not run on a request an IP Access rule has already allowed
  3. Other hosts and firewalls: add an allow rule for 77.83.51.191 in your bot protection or firewall settings
  4. Run the refresh again, so the page can be updated in place

The AskyBot user-agent rule on the AskyBot page covers crawling only. Reading and updating your pages uses your Application Password and does not carry the AskyBot user agent, so allowing the user agent is not enough here.

Publishing Fails

“Permission Denied”:

  1. Verify your user role (need Editor or Admin)
  2. Check if publishing is restricted
  3. Reconnect with appropriate permissions

“Invalid Post Data”:

  1. Check content doesn’t exceed WordPress limits
  2. Remove any unsupported formatting
  3. Try publishing as draft first

“Connection Timeout”:

  1. Your WordPress server may be slow
  2. Try again in a few minutes
  3. For self-hosted: check server performance

Token Expired

If connection shows “Expired”:

  1. Click Reconnect
  2. Re-authorize with WordPress
  3. Connection is restored

Token expiration varies:

  • Self-hosted: Application Passwords last until you revoke them
  • WordPress.com: Tokens rarely expire

Content Issues

“Formatting Looks Wrong”:

  1. Check your WordPress theme’s styling
  2. Some formatting may need theme CSS
  3. Review in WordPress editor and adjust

“Categories/Tags Not Applied”:

  1. Verify categories exist in WordPress
  2. Create categories before publishing
  3. Check spelling matches exactly

Security & Privacy

Permissions Requested

Asky requests:

  • Create and edit posts
  • Create and edit pages
  • Read site information

We do not access:

  • User management
  • Plugin or theme settings
  • Database or files beyond posts
  • Comments or other content

Data Flow

  • Asky reads existing pages when you refresh them and writes only the changes you approve
  • Published content exists independently in WordPress

Best Practices

  1. Test with draft: Publish as draft first to verify formatting
  2. Review in WordPress: Check formatting matches your theme
  3. Use categories: Organize content with categories
  4. Set featured images: Add one before you publish
  5. SEO plugins: Configure SEO settings in WordPress after publishing

WooCommerce Note

Asky publishes articles to posts, pages and custom post types. Publishing WooCommerce products, with prices and inventory, is not supported.

Multisite Support

For WordPress Multisite:

  • Connect to individual sites in the network
  • Each site requires separate connection
  • Network admin can manage all connections

Limitations

AspectLimitation
Post typesPosts, pages and editorial custom post types
Custom fieldsNot currently supported
Bulk publishOne item at a time
WooCommerceProducts not supported
TranslationsLanguage versions publish as unrelated posts

Next Steps

  • If your pages are built with Elementor, read Elementor pages for how updates reach them
  • Connect Webflow for additional publishing
  • Publish other languages from Translations
Last updated on