$is_active, 'externalPatterns' => [], 'patternCategories' => $patternswp_api_section->get_patternswp_category_type(), 'patternsNonce' => wp_create_nonce('patternswp_nonce'), ]; wp_localize_script('patternswp-editor-scripts', 'patternsWpData', $localize_data); $style_asset = patternswp_get_asset_file('build/block-pattern-inserter-editor-styles'); wp_enqueue_style('patternswp-editor-styles', PWP_PLUGIN_URL . 'build/style-patternswp-editor-styles.css', [], $style_asset['version']); } add_action('enqueue_block_editor_assets', 'patternswp_enqueue_editor_assets'); /** * Get asset file data. */ function patternswp_get_asset_file($filepath) { $asset_path = PWP_ABSPATH . $filepath . '.asset.php'; return file_exists($asset_path) ? require_once $asset_path : ['dependencies' => [], 'version' => PWP_VERSION]; } // Plugin activation hook. register_activation_hook(__FILE__, 'patternswp_schedule_hourly_cron'); function patternswp_schedule_hourly_cron() { if ( !wp_next_scheduled( 'patternswp_hourly_transient_load' ) ) { wp_schedule_event( time(), 'hourly', 'patternswp_hourly_transient_load' ); } } // Plugin deactivation hook. register_deactivation_hook(__FILE__, 'patternswp_remove_hourly_cron'); function patternswp_remove_hourly_cron() { $timestamp = wp_next_scheduled( 'patternswp_hourly_transient_load' ); if ( $timestamp ) { wp_unschedule_event( $timestamp, 'patternswp_hourly_transient_load' ); } } /** * AJAX handler to fetch patterns. */ function fetch_patterns_handler() { // Verify nonce if (!isset($_POST['nonce'])) { wp_send_json_error('Missing nonce'); wp_die(); } $nonce = sanitize_text_field(wp_unslash($_POST['nonce'])); if (!wp_verify_nonce($nonce, 'patternswp_nonce')) { wp_send_json_error('Invalid nonce'); wp_die(); } if (!isset($_POST['page']) || !isset($_POST['patternsPerPage'])) { wp_send_json_error('Missing parameters'); wp_die(); } $page = intval($_POST['page']); $patterns_per_page = intval($_POST['patternsPerPage']); $search = sanitize_text_field(wp_unslash($_POST['search'] ?? '')); $category = sanitize_text_field(wp_unslash($_POST['category'] ?? '')); $cache_key = 'patternswp_' . md5("$page-$patterns_per_page-$search-$category"); $cached_data = get_transient($cache_key); if ($cached_data !== false) { wp_send_json_success($cached_data); wp_die(); } $patternswp_api_section = new PatternsWP_API_Section(); $localize_data_ajax = $patternswp_api_section->get_patternswp_pattern($page, $patterns_per_page, $search, $category); if (is_array($localize_data_ajax)) { set_transient($cache_key, $localize_data_ajax, 3600); wp_send_json_success($localize_data_ajax); } else { wp_send_json_error('Failed to fetch patterns'); } wp_die(); } add_action('wp_ajax_fetch_patterns', 'fetch_patterns_handler'); add_action('wp_ajax_nopriv_fetch_patterns', 'fetch_patterns_handler'); /** * Add plugin action links. */ function patternswp_plugin_action_links($links, $file) { if ($file === plugin_basename(__FILE__)) { $get_license_data = get_option('patternswp_plugin_license_data'); $is_active = isset($get_license_data['activated']) ? $get_license_data['activated'] : false; $support_link = 'Support'; array_unshift($links, $support_link); if (!$is_active) { $upgrade_link = 'Upgrade to Pro'; array_unshift($links, $upgrade_link); } } return $links; } add_filter('plugin_action_links', 'patternswp_plugin_action_links', 10, 2); /** * Add custom plugin meta links. */ function patternswp_add_plugin_meta_links($links, $file) { if ($file === plugin_basename(__FILE__)) { $links[] = 'Suggest a Feature'; $links[] = 'Rate Us'; } return $links; } add_filter('plugin_row_meta', 'patternswp_add_plugin_meta_links', 10, 2);