Contents

Hooks Reference — Plugixa FAQ

Every action and filter hook exposed by Plugixa FAQ, grouped by area. Action hooks fire for side effects; filter hooks let you modify data.

Table of contents

  1. Plugin lifecycle
  2. FAQ CRUD hooks
  3. Category CRUD hooks
  4. Shortcode & rendering hooks
  5. Template system hooks
  6. Settings hooks
  7. Feedback hooks
  8. Multilingual hooks
  9. Content source hooks
  10. AI generator hooks PRO
  11. WooCommerce hooks PRO
  12. Elementor hooks
  13. License / Freemius hooks
  14. Theme override guide
  15. Code examples

Plugin lifecycle

Hook Type Fires
pf_fs_pxf_loaded action After Freemius SDK initialization.
plugixa_faq_loaded action After the main Plugin class is instantiated.
plugixa_faq_init action After all plugin hooks are registered.
plugixa_faq_activated action On plugin activation.
plugixa_faq_deactivated action On plugin deactivation.

FAQ CRUD hooks

Before / after create

do_action( 'plugixa_faq_before_create_faq', $data );
do_action( 'plugixa_faq_after_create_faq', $faq_id, $data );

Before / after update

do_action( 'plugixa_faq_before_update_faq', $faq_id, $data );
do_action( 'plugixa_faq_after_update_faq', $faq_id, $data );

Before / after delete

do_action( 'plugixa_faq_before_delete_faq', $faq_id );
do_action( 'plugixa_faq_after_delete_faq', $faq_id );

Bulk operations

do_action( 'plugixa_faq_before_bulk_delete_faqs', $ids );
do_action( 'plugixa_faq_after_bulk_delete_faqs', $ids, $count );
do_action( 'plugixa_faq_after_reorder_faqs', $items );

Filters

Filter Receives Returns
plugixa_faq_get_faqs array $faqs, array $args Modified list.
plugixa_faq_get_faq array $faq, int $id Modified single FAQ.
plugixa_faq_faq_data array $data, string $operation Sanitized data before create/update.

Category CRUD hooks

Before / after create

do_action( 'plugixa_faq_before_create_category', $data );
do_action( 'plugixa_faq_after_create_category', $category_id, $data );

Before / after update

do_action( 'plugixa_faq_before_update_category', $category_id, $data );
do_action( 'plugixa_faq_after_update_category', $category_id, $data );

Before / after delete

do_action( 'plugixa_faq_before_delete_category', $category_id );
do_action( 'plugixa_faq_after_delete_category', $category_id );

Reorder

do_action( 'plugixa_faq_after_reorder_categories', $items );

Filters

Filter Receives Returns
plugixa_faq_get_categories array $cats, array $args Modified list.
plugixa_faq_get_category array $cat, int $id Modified single category.
plugixa_faq_category_data array $data, string $operation Before save.

Shortcode & rendering hooks

Attributes

$atts = apply_filters( 'plugixa_faq_shortcode_atts', $atts, $defaults );

Before / after render

do_action( 'plugixa_faq_before_render', $atts, $instance_id, $settings, $faqs );
do_action( 'plugixa_faq_after_render', $atts, $instance_id, $output );

CSS variables

$vars = apply_filters( 'plugixa_faq_css_vars', $vars, $settings );

Per-item HTML

$html = apply_filters(
    'plugixa_faq_rendered_faq_item',
    $html,     // string
    $faq,      // array
    $settings, // array
    $index     // int
);

Final output

$output = apply_filters(
    'plugixa_faq_shortcode_output',
    $output,
    $atts,
    $instance_id,
    $settings
);

Scripts & styles

do_action( 'plugixa_faq_enqueue_scripts', $instance_id, $settings );
$script_data = apply_filters( 'plugixa_faq_localize_script_data', $data, $settings, $instance_id );

Template system hooks

Plugixa FAQ uses a WooCommerce-style template loader with theme override support.

Filters

Filter Receives Returns
plugixa_faq_template_path string $located, string $template, string $template_name Resolved template path.
plugixa_faq_template_vars array $vars, string $template Vars extracted before render.

Actions

do_action( 'plugixa_faq_before_template', $template, $path, $vars );
do_action( 'plugixa_faq_after_template', $template, $path, $vars );

Template search order

  1. {child-theme}/plugixa-faq/{template}.php
  2. {parent-theme}/plugixa-faq/{template}.php
  3. {plugin}/pro/templates/frontend/{template}.php (if pro/ exists)
  4. {plugin}/templates/frontend/{template}.php

Settings hooks

Hook Type Purpose
plugixa_faq_settings_defaults filter Modify default values before merging with saved.
plugixa_faq_get_settings filter Modify settings on read.
plugixa_faq_sanitize_settings filter Modify settings before save ($settings, $input, $current).
plugixa_faq_validate_settings filter Return validation errors ($errors, $settings).
plugixa_faq_before_save_settings action Before update_option ($settings, $current).
plugixa_faq_after_save_settings action After save.

Feedback hooks

Hook Type Purpose
plugixa_faq_feedback_permission filter Decide if a user can vote ($allowed, $faq_id).
plugixa_faq_feedback_data filter Modify payload before save.
plugixa_faq_before_save_feedback action Before insert.
plugixa_faq_after_save_feedback action After insert — integrate with CRM/notifications here.
plugixa_faq_before_delete_feedback action Before delete.
plugixa_faq_after_delete_feedback action After delete.

Multilingual hooks

Hook Type Purpose
plugixa_faq_multilingual_active filter Override auto-detection (return bool).
plugixa_faq_current_language filter Override current language ($code).
plugixa_faq_available_languages filter Modify the languages array.
plugixa_faq_language_where filter Modify the WHERE clause fragment.
plugixa_faq_before_link_translations action Before linking two items.
plugixa_faq_after_link_translations action After linking.

Content source hooks

Each source has its own query filter and results filter:

$args    = apply_filters( 'plugixa_faq_source_{source}_query', $args, $atts );
$results = apply_filters( 'plugixa_faq_source_{source}_results', $results, $atts );

Where {source} is: plugixa_faqs, wordpress_posts, wordpress_pages, woocommerce_products, wordpress_media.


AI generator hooks PRO

Hook Type Purpose
plugixa_faq_before_ai_generate action Before a generation request ($topic, $provider, $count).
plugixa_faq_after_ai_generate action After a successful generation ($faqs, $topic, $provider).
plugixa_faq_ai_generated_faq filter Modify a single generated item.
plugixa_faq_ai_generated_faqs filter Modify the whole batch.
plugixa_faq_ai_provider_config filter Override provider settings at runtime.
plugixa_faq_ai_max_file_size filter Override the default PDF/doc upload size limit.

WooCommerce hooks PRO

Hook Type Purpose
plugixa_faq_product_tab_title filter Customize tab title per-product ($title, $product_id).
plugixa_faq_product_tab_priority filter Change tab position ($priority, $product_id).
plugixa_faq_product_tab_content filter Modify rendered content ($content, $product_id, $atts).
plugixa_faq_product_metabox_faqs filter Modify the FAQ list in the product metabox.

Elementor hooks

Hook Type Purpose
plugixa_faq_elementor_widget_controls action Register additional widget controls.
plugixa_faq_elementor_widget_settings filter Modify widget settings.
plugixa_faq_elementor_widget_render filter Customize rendered output.

License / Freemius hooks

Hook Type Purpose
plugixa_faq_is_pro filter Override the Pro gate (for testing).
plugixa_faq_pro_features filter Modify the list of gated features.
plugixa_faq_show_pro_upsells filter Hide “locked” pro teasers (true/false).

Theme override guide

To override a plugin template from your theme:

  1. Identify the template you want to override. Files live under templates/frontend/ in the plugin.
  2. Create the same path under your theme: {your-theme}/plugixa-faq/{template}.php.
  3. Copy the plugin’s file into that path as a starting point.
  4. Edit.

Overridable templates

  • faq-container.php — main wrapper
  • faq-item.php — single FAQ accordion item
  • faq-group.php — category group wrapper
  • search-box.php — search input
  • single-faq.php — single-FAQ page
  • icons/chevron.php, icons/caret.php, icons/plus.php, … — icon SVGs
  • feedback-widget.php PRO
  • faq-children.php PRO — nested FAQ rendering
  • submission-form.php PRO
  • woocommerce-product-card.php PRO

Example

my-theme/
└── plugixa-faq/
    ├── faq-item.php          ← override only this
    └── icons/
        └── chevron.php        ← and this one

Any template you don’t override falls through to the plugin’s default. You can update the plugin freely — only the files you customized need re-review.


Code examples

Log every FAQ creation

add_action( 'plugixa_faq_after_create_faq', function( $id, $data ) {
    error_log( "FAQ created: #{$id} — {$data['question']}" );
}, 10, 2 );

Auto-set language to en for anything without one

add_filter( 'plugixa_faq_faq_data', function( $data ) {
    if ( empty( $data['language_code'] ) ) {
        $data['language_code'] = 'en';
    }
    return $data;
} );

Block feedback from non-logged-in users

add_filter( 'plugixa_faq_feedback_permission', function( $allowed, $faq_id ) {
    return is_user_logged_in() ? $allowed : false;
}, 10, 2 );

Translate all generated FAQs through a proofreader

add_filter( 'plugixa_faq_ai_generated_faqs', function( $faqs ) {
    foreach ( $faqs as &$faq ) {
        $faq['answer'] = your_proofreader_function( $faq['answer'] );
    }
    return $faqs;
} );

Exclude draft FAQs from frontend queries (redundant but illustrative)

add_filter( 'plugixa_faq_source_plugixa_faqs_query', function( $args, $atts ) {
    $args['status'] = 'published';
    return $args;
}, 10, 2 );

Add a custom WooCommerce tab priority per product category

add_filter( 'plugixa_faq_product_tab_priority', function( $priority, $product_id ) {
    if ( has_term( 'featured', 'product_cat', $product_id ) ) {
        return 5;  // very early
    }
    return $priority;
}, 10, 2 );

Disable the plugin’s Pro upsell banners

add_filter( 'plugixa_faq_show_pro_upsells', '__return_false' );

Quick Links