Skyboot AI Markdown has 14 WordPress filters for changing how Markdown, llms.txt, product facts, content types and AI analytics behave. Add them in a small custom plugin or your child theme’s functions.php. The callbacks run on every request that uses the feature, so keep them fast. New to filters? Read the WordPress filters handbook.
Markdown and llms.txt
skyboot_ai_md_is_markdown_request
Decide whether the current request is answered with Markdown.
// Never serve Markdown for /checkout-preview/.
add_filter( 'skyboot_ai_md_is_markdown_request', function ( $wants ) {
$uri = isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '';
return false !== strpos( $uri, '/checkout-preview/' ) ? false : $wants;
} );
skyboot_ai_md_llms_exclude_post
Exclude a post from llms.txt, llms-full.txt, IndexNow and the readiness audit. Also use it to support an SEO plugin that is not built in.
add_filter( 'skyboot_ai_md_llms_exclude_post', function ( $exclude, WP_Post $post ) {
return $exclude || has_term( 'internal', 'category', $post );
}, 10, 2 );
skyboot_ai_md_meta_description
Change the description used in the Markdown front matter and llms.txt.
add_filter( 'skyboot_ai_md_meta_description', function ( $desc, WP_Post $post ) {
return '' !== $desc ? $desc : get_post_meta( $post->ID, 'my_summary', true );
}, 10, 2 );
skyboot_ai_md_max_list_items
The maximum number of items listed on archive Markdown pages. Default 100.
add_filter( 'skyboot_ai_md_max_list_items', function () {
return 50;
} );
skyboot_ai_md_noise_shortcodes
Shortcodes removed completely from Markdown pages (page chrome, not content). By default this covers the breadcrumb shortcodes of Rank Math, Yoast, AIOSEO, SEOPress and Slim SEO.
add_filter( 'skyboot_ai_md_noise_shortcodes', function ( $tags ) {
$tags[] = 'social_share_buttons';
return $tags;
} );
Content types
skyboot_ai_md_content_post_types
The post types treated as real content by the readiness scan, IndexNow, llms.txt and Markdown. By default: public, searchable post types without builder templates (Elementor templates and floating buttons, Divi layouts, Bricks and Oxygen templates and others), minus the types unticked under AI Visibility > Settings > Content types. The filter runs after that setting.
add_filter( 'skyboot_ai_md_content_post_types', function ( $types ) {
return array_diff( $types, array( 'portfolio' ) );
} );
E-commerce
skyboot_ai_md_commerce_platforms
The detected store plugins. Each entry has label, post_type and taxonomies. Use it to add a store plugin that is not supported yet.
add_filter( 'skyboot_ai_md_commerce_platforms', function ( $platforms ) {
$platforms['mystore'] = array( 'label' => 'My Store', 'post_type' => 'my_product', 'taxonomies' => array( 'my_product_cat' ) );
return $platforms;
} );
skyboot_ai_md_product_facts
The product facts used in Markdown, llms.txt and the readiness audit. Keys: price, price_min, price_max, regular_price, on_sale, currency, availability (a schema.org word such as InStock), availability_label, sku, gtin, brand, rating, review_count, attributes (name => value), categories, short_description and type.
add_filter( 'skyboot_ai_md_product_facts', function ( $facts, WP_Post $post ) {
if ( '' === $facts['brand'] ) {
$facts['brand'] = get_post_meta( $post->ID, '_my_brand', true );
}
return $facts;
}, 10, 2 );
Citation Readiness
skyboot_ai_md_audit_post_types
The post types that get a readiness score. Default: the content post types above.
add_filter( 'skyboot_ai_md_audit_post_types', function ( $types ) {
return array_diff( $types, array( 'landing_page' ) );
} );
AI analytics
skyboot_ai_md_ai_bots
The AI crawler list, keyed by user-agent token. Each entry has owner, category (user, search, index or training) and product.
add_filter( 'skyboot_ai_md_ai_bots', function ( $bots ) {
$bots['NewAIBot'] = array( 'owner' => 'Example AI', 'category' => 'search', 'product' => 'Example Search' );
return $bots;
} );
skyboot_ai_md_ai_referrers
AI assistants that send visitors, as referrer host suffix => assistant name.
add_filter( 'skyboot_ai_md_ai_referrers', function ( $refs ) {
$refs['chat.example.ai'] = 'Example AI';
return $refs;
} );
skyboot_ai_md_bot_ip_sources
The official crawler IP range lists used for verification, as token => array of URLs. Each URL may return JSON or plain text with CIDR ranges.
add_filter( 'skyboot_ai_md_bot_ip_sources', function ( $sources ) {
$sources['NewAIBot'] = array( 'https://example.ai/crawler-ips.json' );
return $sources;
} );
skyboot_ai_md_bot_dns_rules
Reverse-DNS host suffixes for crawlers verified by DNS, as token => array of suffixes.
add_filter( 'skyboot_ai_md_bot_dns_rules', function ( $rules ) {
$rules['NewAIBot'] = array( '.crawl.example.ai' );
return $rules;
} );
skyboot_ai_md_client_ip
The detected visitor IP. Behind Cloudflare the plugin already uses CF-Connecting-IP. For other reverse proxies, return the real client IP, and only trust the header when the request comes from your proxy.
add_filter( 'skyboot_ai_md_client_ip', function ( $ip ) {
if ( '10.0.0.5' === $ip && ! empty( $_SERVER['HTTP_X_REAL_IP'] ) ) {
return sanitize_text_field( wp_unslash( $_SERVER['HTTP_X_REAL_IP'] ) );
}
return $ip;
} );
skyboot_ai_md_referral_daily_cap
The maximum number of AI visitor records accepted per day, site-wide. Default 20000.
add_filter( 'skyboot_ai_md_referral_daily_cap', function () {
return 50000;
} );
Capabilities
Each permission under AI Markdown > Permissions is a capability, so you can check it with current_user_can(). See Permissions for the full list.
Shortcode
[skyboot_ai_markdown_link text="Read as Markdown"]
Prints a link to the current post’s Markdown version.
FAQ
How do I exclude a post from llms.txt with code?
Use the skyboot_ai_md_llms_exclude_post filter and return true for the posts to leave out. The same filter removes them from llms-full.txt, IndexNow and the readiness audit.
How do I remove a custom post type from llms.txt?
Untick it under AI Visibility > Settings > Content types, or remove it in code with the skyboot_ai_md_content_post_types filter.
How do I add a new AI crawler to the analytics?
Add its user-agent token with skyboot_ai_md_ai_bots. If the vendor publishes an IP list, add it with skyboot_ai_md_bot_ip_sources so visits can be verified. Otherwise, add reverse-DNS suffixes with skyboot_ai_md_bot_dns_rules.
My site is behind a reverse proxy. How do I get the real visitor IP?
Return the real client IP from the skyboot_ai_md_client_ip filter, and only trust the forwarded header when the request comes from your proxy’s address. Cloudflare is handled automatically.