Skip to content

Filters

MindfulMedia provides filter hooks to modify plugin behavior and output.

Overview

Filter hooks allow you to:

  • Modify data before it's used
  • Customize HTML output
  • Change query parameters
  • Override default behavior

Query Filters

mindful_media_archive_query_args

Modify WP_Query arguments for archive listings.

add_filter('mindful_media_archive_query_args', function($query_args, $atts) {
    // Only show featured items
    $query_args['meta_query'][] = array(
        'key' => '_mindful_media_featured',
        'value' => '1'
    );
    return $query_args;
}, 10, 2);

Parameters:

  • $query_args (array) - WP_Query arguments
  • $atts (array) - Shortcode attributes

Returns: Modified query arguments array


mindful_media_browse_query_args

Modify query for browse page sections.

add_filter('mindful_media_browse_query_args', function($query_args, $section, $term_id) {
    // Limit to 5 items per section
    $query_args['posts_per_page'] = 5;
    return $query_args;
}, 10, 3);

Parameters:

  • $query_args (array) - WP_Query arguments
  • $section (string) - Section name (teachers, topics, etc.)
  • $term_id (int) - Term ID being queried

Modify query for related content.

add_filter('mindful_media_related_query_args', function($query_args, $post_id) {
    // Exclude specific categories from related
    $query_args['tax_query'][] = array(
        'taxonomy' => 'media_category',
        'field' => 'slug',
        'terms' => 'private',
        'operator' => 'NOT IN'
    );
    return $query_args;
}, 10, 2);

Output Filters

mindful_media_card_html

Modify individual media card HTML.

add_filter('mindful_media_card_html', function($html, $post_id, $atts) {
    // Add custom data attribute
    $html = str_replace(
        'class="mindful-media-card"',
        'class="mindful-media-card" data-tracking="' . $post_id . '"',
        $html
    );
    return $html;
}, 10, 3);

Parameters:

  • $html (string) - Card HTML
  • $post_id (int) - Media post ID
  • $atts (array) - Shortcode attributes

mindful_media_player_html

Modify media player HTML.

add_filter('mindful_media_player_html', function($html, $url, $source, $atts) {
    // Wrap player in custom container
    return '<div class="my-player-wrapper">' . $html . '</div>';
}, 10, 4);

Parameters:

  • $html (string) - Player HTML
  • $url (string) - Media URL
  • $source (string) - Source type (youtube, vimeo, etc.)
  • $atts (array) - Player attributes

mindful_media_thumbnail_html

Modify thumbnail HTML.

add_filter('mindful_media_thumbnail_html', function($html, $post_id, $size) {
    // Add lazy loading
    return str_replace('<img', '<img loading="lazy"', $html);
}, 10, 3);

mindful_media_duration_display

Modify how duration is displayed.

add_filter('mindful_media_duration_display', function($display, $hours, $minutes) {
    // Custom format
    if ($hours > 0) {
        return $hours . 'h ' . $minutes . 'm';
    }
    return $minutes . ' min';
}, 10, 3);

Data Filters

mindful_media_card_data

Modify card data before rendering.

add_filter('mindful_media_card_data', function($data, $post_id) {
    // Add custom field to card data
    $data['custom_field'] = get_post_meta($post_id, '_custom_field', true);
    return $data;
}, 10, 2);

Default data structure:

array(
    'id' => $post_id,
    'title' => $title,
    'thumbnail' => $thumbnail_url,
    'duration' => $duration,
    'teacher' => $teacher_name,
    'url' => $permalink,
    'type' => $media_type
)

mindful_media_settings

Modify settings before use.

add_filter('mindful_media_settings', function($settings) {
    // Force specific setting
    $settings['items_per_page'] = 24;
    return $settings;
});

Email Filters

mindful_media_notification_subject

Modify notification email subject.

add_filter('mindful_media_notification_subject', function($subject, $post, $term) {
    return '🎬 ' . $subject; // Add emoji
}, 10, 3);

mindful_media_notification_body

Modify notification email body.

add_filter('mindful_media_notification_body', function($body, $post, $term, $user) {
    // Add custom footer
    $body .= '<p>Thanks for being a valued member!</p>';
    return $body;
}, 10, 4);

mindful_media_notification_recipients

Modify who receives notifications.

add_filter('mindful_media_notification_recipients', function($user_ids, $term_id, $taxonomy) {
    // Exclude certain users
    return array_filter($user_ids, function($id) {
        return !user_has_opted_out($id);
    });
}, 10, 3);

Access Control Filters

mindful_media_user_can_view

Override access control checks.

add_filter('mindful_media_user_can_view', function($can_view, $post_id, $user_id) {
    // Custom access logic
    if (user_is_vip($user_id)) {
        return true; // VIPs see everything
    }
    return $can_view;
}, 10, 3);

mindful_media_locked_message

Modify locked content message.

add_filter('mindful_media_locked_message', function($message, $post_id, $required_levels) {
    // Custom message based on required level
    $level_name = get_the_title($required_levels[0]);
    return "Upgrade to {$level_name} to access this content!";
}, 10, 3);

CSS/JS Filters

mindful_media_frontend_styles

Add or modify frontend styles.

add_filter('mindful_media_frontend_styles', function($styles) {
    $styles['my-custom'] = array(
        'src' => plugin_dir_url(__FILE__) . 'custom.css',
        'deps' => array('mindful-media-frontend'),
        'ver' => '1.0.0'
    );
    return $styles;
});

mindful_media_frontend_scripts

Add or modify frontend scripts.

add_filter('mindful_media_frontend_scripts', function($scripts) {
    $scripts['my-custom'] = array(
        'src' => plugin_dir_url(__FILE__) . 'custom.js',
        'deps' => array('mindful-media-frontend', 'jquery'),
        'ver' => '1.0.0',
        'in_footer' => true
    );
    return $scripts;
});

Usage Examples

Exclude Categories from Archive

add_filter('mindful_media_archive_query_args', function($args, $atts) {
    // Exclude "draft" and "internal" categories
    $args['tax_query'][] = array(
        'taxonomy' => 'media_category',
        'field' => 'slug',
        'terms' => array('draft', 'internal'),
        'operator' => 'NOT IN'
    );
    return $args;
}, 10, 2);

Custom Card Layout

add_filter('mindful_media_card_html', function($html, $post_id) {
    // Add view count badge
    $views = get_post_meta($post_id, '_view_count', true) ?: 0;
    $badge = '<span class="view-badge">' . $views . ' views</span>';

    // Insert before closing card div
    return str_replace('</div><!-- .mindful-media-card -->', 
        $badge . '</div><!-- .mindful-media-card -->', $html);
}, 10, 2);

Premium-Only Content Filter

add_filter('mindful_media_archive_query_args', function($args) {
    // Only show free content to non-members
    if (!current_user_can('premium_member')) {
        $args['meta_query'][] = array(
            'key' => '_premium_only',
            'compare' => 'NOT EXISTS'
        );
    }
    return $args;
});