ID, '_wpdd_price', true); $is_free = get_post_meta($post->ID, '_wpdd_is_free', true); $sale_price = get_post_meta($post->ID, '_wpdd_sale_price', true); ?>

ID, '_wpdd_product_type', true) ?: 'digital_download'; ?>



ID, '_wpdd_files', true); if (!is_array($files)) { $files = array(); } ?>
$file) : ?>
ID, '_wpdd_git_repository', true); $git_username = get_post_meta($post->ID, '_wpdd_git_username', true); $git_token = get_post_meta($post->ID, '_wpdd_git_token', true); $webhook_passcode = get_post_meta($post->ID, '_wpdd_webhook_passcode', true); $max_activations = get_post_meta($post->ID, '_wpdd_max_activations', true) ?: 1; $license_duration = get_post_meta($post->ID, '_wpdd_license_duration', true); $current_version = get_post_meta($post->ID, '_wpdd_current_version', true); $min_wp_version = get_post_meta($post->ID, '_wpdd_min_wp_version', true); $tested_wp_version = get_post_meta($post->ID, '_wpdd_tested_wp_version', true); // Generate webhook passcode if not set if (!$webhook_passcode) { $webhook_passcode = wp_generate_password(32, false); update_post_meta($post->ID, '_wpdd_webhook_passcode', $webhook_passcode); } $webhook_url = home_url("/wp-json/wpdd/v1/webhook/{$post->ID}/{$webhook_passcode}"); ?>










ID, '_wpdd_download_limit', true); $download_expiry = get_post_meta($post->ID, '_wpdd_download_expiry', true); $enable_watermark = get_post_meta($post->ID, '_wpdd_enable_watermark', true); $watermark_text = get_post_meta($post->ID, '_wpdd_watermark_text', true); ?>

get_var($wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}wpdd_orders WHERE product_id = %d AND status = 'completed'", $post->ID )); $total_revenue = $wpdb->get_var($wpdb->prepare( "SELECT SUM(amount) FROM {$wpdb->prefix}wpdd_orders WHERE product_id = %d AND status = 'completed'", $post->ID )); $total_downloads = $wpdb->get_var($wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}wpdd_downloads WHERE product_id = %d", $post->ID )); ?>

$

sanitize_text_field($file['id']), 'name' => sanitize_text_field($file['name']), 'url' => esc_url_raw($file['url']) ); } } update_post_meta($post_id, '_wpdd_files', $files); } if (isset($_POST['wpdd_download_limit'])) { update_post_meta($post_id, '_wpdd_download_limit', intval($_POST['wpdd_download_limit'])); } if (isset($_POST['wpdd_download_expiry'])) { update_post_meta($post_id, '_wpdd_download_expiry', intval($_POST['wpdd_download_expiry'])); } update_post_meta($post_id, '_wpdd_enable_watermark', isset($_POST['wpdd_enable_watermark']) ? '1' : '0'); if (isset($_POST['wpdd_watermark_text'])) { update_post_meta($post_id, '_wpdd_watermark_text', sanitize_text_field($_POST['wpdd_watermark_text'])); } // Product type if (isset($_POST['wpdd_product_type'])) { update_post_meta($post_id, '_wpdd_product_type', sanitize_text_field($_POST['wpdd_product_type'])); } // Software licensing fields if (isset($_POST['wpdd_git_repository'])) { update_post_meta($post_id, '_wpdd_git_repository', esc_url_raw($_POST['wpdd_git_repository'])); } if (isset($_POST['wpdd_git_username'])) { update_post_meta($post_id, '_wpdd_git_username', sanitize_text_field($_POST['wpdd_git_username'])); } if (isset($_POST['wpdd_git_token'])) { update_post_meta($post_id, '_wpdd_git_token', sanitize_text_field($_POST['wpdd_git_token'])); } if (isset($_POST['wpdd_max_activations'])) { update_post_meta($post_id, '_wpdd_max_activations', intval($_POST['wpdd_max_activations'])); } if (isset($_POST['wpdd_license_duration'])) { update_post_meta($post_id, '_wpdd_license_duration', intval($_POST['wpdd_license_duration'])); } if (isset($_POST['wpdd_current_version'])) { update_post_meta($post_id, '_wpdd_current_version', sanitize_text_field($_POST['wpdd_current_version'])); } if (isset($_POST['wpdd_min_wp_version'])) { update_post_meta($post_id, '_wpdd_min_wp_version', sanitize_text_field($_POST['wpdd_min_wp_version'])); } if (isset($_POST['wpdd_tested_wp_version'])) { update_post_meta($post_id, '_wpdd_tested_wp_version', sanitize_text_field($_POST['wpdd_tested_wp_version'])); } } }