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
- Plugin lifecycle
- FAQ CRUD hooks
- Category CRUD hooks
- Shortcode & rendering hooks
- Template system hooks
- Settings hooks
- Feedback hooks
- Multilingual hooks
- Content source hooks
- AI generator hooks PRO
- WooCommerce hooks PRO
- Elementor hooks
- License / Freemius hooks
- Theme override guide
- 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
{child-theme}/plugixa-faq/{template}.php
{parent-theme}/plugixa-faq/{template}.php
{plugin}/pro/templates/frontend/{template}.php (if pro/ exists)
{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:
- Identify the template you want to override. Files live under
templates/frontend/ in the plugin.
- Create the same path under your theme:
{your-theme}/plugixa-faq/{template}.php.
- Copy the plugin’s file into that path as a starting point.
- 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' );