Ich erstelle Shopping-Website mit Woocommerce, mit virtuellen und herunterladbaren Produkt Ich möchte nach dem Kauf gelöscht werden und keine man kann das gleiche Produkt wieder kaufenAlle meine Produkte sind einzigartig, und ich brauche sie nicht im Katalog zu bleiben, sobald sie verkauft werden
Antwort
Haben Sie darüber nachgedacht, die Anzahl der Lagerbestände jedes Artikels auf 1 zu setzen? Sie können dann aktivieren Ausblenden von Artikeln aus dem Katalog in Ihren WooCommerce-Einstellungen.
Es ist möglich, mit dem Code zu tun, aber das ist eine elegantere Lösung, wie Sie die Produktdaten zur Verfügung, wenn die Suche auf Aufträge erhalten haben mögen, usw.
hier ist der Code für die digitalen Download, wo kann i fügen sie den Code zu ihm
<?php
einmal herunterladen, wenn (defined ('ABSPATH!')) { Ausfahrt; // Beenden bei direktem Zugriff }
/** * Download-Handler. * * Handle digitale Downloads. * * @class WC_Download_Handler * @version 2.2.0 * @package WooCommerce/Klassen * @Category Klasse * @author WooThemes */ Klasse WC_Download_Handler {
/**
* Hook in methods.
*/
public static function init() {
if (isset($_GET['download_file']) && isset($_GET['order']) && isset($_GET['email'])) {
add_action('init', array(__CLASS__, 'download_product'));
}
add_action('woocommerce_download_file_redirect', array(__CLASS__, 'download_file_redirect'), 10, 2);
add_action('woocommerce_download_file_xsendfile', array(__CLASS__, 'download_file_xsendfile'), 10, 2);
add_action('woocommerce_download_file_force', array(__CLASS__, 'download_file_force'), 10, 2);
}
/**
* Check if we need to download a file and check validity.
*/
public static function download_product() {
$product_id = absint($_GET['download_file']);
$_product = wc_get_product($product_id);
$download_data = self::get_download_data(array(
'product_id' => $product_id,
'order_key' => wc_clean($_GET['order']),
'email' => sanitize_email(str_replace(' ', '+', $_GET['email'])),
'download_id' => wc_clean(isset($_GET['key']) ? preg_replace('/\s+/', ' ', $_GET['key']) : '')
));
if ($_product && $download_data) {
self::check_current_user_can_download($download_data);
do_action('woocommerce_download_product', $download_data->user_email, $download_data->order_key, $download_data->product_id, $download_data->user_id, $download_data->download_id, $download_data->order_id);
self::count_download($download_data);
self::download($_product->get_file_download_path($download_data->download_id), $download_data->product_id);
} else {
self::download_error(__('Invalid download link.', 'woocommerce'));
}
}
/**
* Get a download from the database.
*
* @param array $args Contains email, order key, product id and download id
* @return object
* @access private
*/
private static function get_download_data($args = array()) {
global $wpdb;
$query = "SELECT * FROM " . $wpdb->prefix . "woocommerce_downloadable_product_permissions ";
$query .= "WHERE user_email = %s ";
$query .= "AND order_key = %s ";
$query .= "AND product_id = %s ";
if ($args['download_id']) {
$query .= "AND download_id = %s ";
}
return $wpdb->get_row($wpdb->prepare($query, array($args['email'], $args['order_key'], $args['product_id'], $args['download_id'])));
}
/**
* Perform checks to see if the current user can download the file.
* @param object $download_data
* @access private
*/
private static function check_current_user_can_download($download_data) {
self::check_order_is_valid($download_data);
self::check_downloads_remaining($download_data);
self::check_download_expiry($download_data);
self::check_download_login_required($download_data);
}
/**
* Check if an order is valid for downloading from.
* @param array $download_data
* @access private
*/
private static function check_order_is_valid($download_data) {
if ($download_data->order_id && ($order = wc_get_order($download_data->order_id)) && ! $order->is_download_permitted()) {
self::download_error(__('Invalid order.', 'woocommerce'), '', 403);
}
}
/**
* Check if there are downloads remaining.
* @param array $download_data
* @access private
*/
private static function check_downloads_remaining($download_data) {
if ('0' == $download_data->downloads_remaining ) {
self::download_error(__('Sorry, you have reached your download limit for this file', 'woocommerce'), '', 403);
}
}
/**
* Check if the download has expired.
* @param array $download_data
* @access private
*/
private static function check_download_expiry($download_data) {
if ($download_data->access_expires > 0 && strtotime($download_data->access_expires) < strtotime('midnight', current_time('timestamp'))) {
self::download_error(__('Sorry, this download has expired', 'woocommerce'), '', 403);
}
}
/**
* Check if a download requires the user to login first.
* @param array $download_data
* @access private
*/
private static function check_download_login_required($download_data) {
if ($download_data->user_id && 'yes' === get_option('woocommerce_downloads_require_login')) {
if (! is_user_logged_in()) {
if (wc_get_page_id('myaccount')) {
wp_safe_redirect(add_query_arg('wc_error', urlencode(__('You must be logged in to download files.', 'woocommerce')), wc_get_page_permalink('myaccount')));
exit;
} else {
self::download_error(__('You must be logged in to download files.', 'woocommerce') . ' <a href="' . esc_url(wp_login_url(wc_get_page_permalink('myaccount'))) . '" class="wc-forward">' . __('Login', 'woocommerce') . '</a>', __('Log in to Download Files', 'woocommerce'), 403);
}
} elseif (! current_user_can('download_file', $download_data)) {
self::download_error(__('This is not your download link.', 'woocommerce'), '', 403);
}
}
}
/**
* Log the download + increase counts.
* @param object $download_data
*/
public static function count_download($download_data) {
global $wpdb;
$wpdb->update(
$wpdb->prefix . 'woocommerce_downloadable_product_permissions',
array(
'download_count' => $download_data->download_count + 1,
'downloads_remaining' => $download_data->downloads_remaining > 0 ? $download_data->downloads_remaining - 1 : $download_data->downloads_remaining,
),
array(
'permission_id' => absint($download_data->permission_id),
),
array('%d', '%s'),
array('%d')
);
}
/**
* Download a file - hook into init function.
* @param string $file_path URL to file
* @param integer $product_id of the product being downloaded
*/
public static function download($file_path, $product_id) {
if (! $file_path) {
self::download_error(__('No file defined', 'woocommerce'));
}
$filename = basename($file_path);
if (strstr($filename, '?')) {
$filename = current(explode('?', $filename));
}
$filename = apply_filters('woocommerce_file_download_filename', $filename, $product_id);
$file_download_method = apply_filters('woocommerce_file_download_method', get_option('woocommerce_file_download_method', 'force'), $product_id);
// Add action to prevent issues in IE
add_action('nocache_headers', array(__CLASS__, 'ie_nocache_headers_fix'));
// Trigger download via one of the methods
do_action('woocommerce_download_file_' . $file_download_method, $file_path, $filename);
}
/**
* Redirect to a file to start the download.
* @param string $file_path
* @param string $filename
*/
public static function download_file_redirect($file_path, $filename = '') {
header('Location: ' . $file_path);
exit;
}
/**
* Parse file path and see if its remote or local.
* @param string $file_path
* @return array
*/
public static function parse_file_path($file_path) {
$wp_uploads = wp_upload_dir();
$wp_uploads_dir = $wp_uploads['basedir'];
$wp_uploads_url = $wp_uploads['baseurl'];
// Replace uploads dir, site url etc with absolute counterparts if we can
$replacements = array(
$wp_uploads_url => $wp_uploads_dir,
network_site_url('/', 'https') => ABSPATH,
network_site_url('/', 'http') => ABSPATH,
site_url('/', 'https') => ABSPATH,
site_url('/', 'http') => ABSPATH
);
$file_path = str_replace(array_keys($replacements), array_values($replacements), $file_path);
$parsed_file_path = parse_url($file_path);
$remote_file = true;
// See if path needs an abspath prepended to work
if (file_exists(ABSPATH . $file_path)) {
$remote_file = false;
$file_path = ABSPATH . $file_path;
// Check if we have an absolute path
} elseif ((! isset($parsed_file_path['scheme']) || ! in_array($parsed_file_path['scheme'], array('http', 'https', 'ftp'))) && isset($parsed_file_path['path']) && file_exists($parsed_file_path['path'])) {
$remote_file = false;
$file_path = $parsed_file_path['path'];
}
return array(
'remote_file' => $remote_file,
'file_path' => $file_path
);
}
/**
* Download a file using X-Sendfile, X-Lighttpd-Sendfile, or X-Accel-Redirect if available.
* @param string $file_path
* @param string $filename
*/
public static function download_file_xsendfile($file_path, $filename) {
$parsed_file_path = self::parse_file_path($file_path);
if (function_exists('apache_get_modules') && in_array('mod_xsendfile', apache_get_modules())) {
self::download_headers($parsed_file_path['file_path'], $filename);
header("X-Sendfile: " . $parsed_file_path['file_path']);
exit;
} elseif (stristr(getenv('SERVER_SOFTWARE'), 'lighttpd')) {
self::download_headers($parsed_file_path['file_path'], $filename);
header("X-Lighttpd-Sendfile: " . $parsed_file_path['file_path']);
exit;
} elseif (stristr(getenv('SERVER_SOFTWARE'), 'nginx') || stristr(getenv('SERVER_SOFTWARE'), 'cherokee')) {
self::download_headers($parsed_file_path['file_path'], $filename);
$xsendfile_path = trim(preg_replace('`^' . str_replace('\\', '/', getcwd()) . '`', '', $parsed_file_path['file_path']), '/');
header("X-Accel-Redirect: /$xsendfile_path");
exit;
}
// Fallback
self::download_file_force($file_path, $filename);
}
/**
* Force download - this is the default method.
* @param string $file_path
* @param string $filename
*/
public static function download_file_force($file_path, $filename) {
$parsed_file_path = self::parse_file_path($file_path);
self::download_headers($parsed_file_path['file_path'], $filename);
if (! self::readfile_chunked($parsed_file_path['file_path'])) {
if ($parsed_file_path['remote_file']) {
self::download_file_redirect($file_path);
} else {
self::download_error(__('File not found', 'woocommerce'));
}
}
exit;
}
/**
* Get content type of a download.
* @param string $file_path
* @return string
* @access private
*/
private static function get_download_content_type($file_path) {
$file_extension = strtolower(substr(strrchr($file_path, "."), 1));
$ctype = "application/force-download";
foreach (get_allowed_mime_types() as $mime => $type) {
$mimes = explode('|', $mime);
if (in_array($file_extension, $mimes)) {
$ctype = $type;
break;
}
}
return $ctype;
}
/**
* Set headers for the download.
* @param string $file_path
* @param string $filename
* @access private
*/
private static function download_headers($file_path, $filename) {
self::check_server_config();
self::clean_buffers();
nocache_headers();
header("X-Robots-Tag: noindex, nofollow", true);
header("Content-Type: " . self::get_download_content_type($file_path));
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=\"" . $filename . "\";");
header("Content-Transfer-Encoding: binary");
if ($size = @filesize($file_path)) {
header("Content-Length: " . $size);
}
}
/**
* Check and set certain server config variables to ensure downloads work as intended.
*/
private static function check_server_config() {
if (function_exists('set_time_limit') && false === strpos(ini_get('disable_functions'), 'set_time_limit') && ! ini_get('safe_mode')) {
@set_time_limit(0);
}
if (function_exists('get_magic_quotes_runtime') && get_magic_quotes_runtime() && version_compare(phpversion(), '5.4', '<')) {
set_magic_quotes_runtime(0);
}
if (function_exists('apache_setenv')) {
@apache_setenv('no-gzip', 1);
}
@ini_set('zlib.output_compression', 'Off');
@session_write_close();
}
/**
* Clean all output buffers.
*
* Can prevent errors, for example: transfer closed with 3 bytes remaining to read.
*
* @access private
*/
private static function clean_buffers() {
if (ob_get_level()) {
$levels = ob_get_level();
for ($i = 0; $i < $levels; $i++) {
@ob_end_clean();
}
} else {
@ob_end_clean();
}
}
/**
* readfile_chunked.
*
* Reads file in chunks so big downloads are possible without changing PHP.INI - http://codeigniter.com/wiki/Download_helper_for_large_files/.
*
* @param string $file
* @return bool Success or fail
*/
public static function readfile_chunked($file) {
$chunksize = 1024 * 1024;
$handle = @fopen($file, 'r');
if (false === $handle) {
return false;
}
while (! @feof($handle)) {
echo @fread($handle, $chunksize);
if (ob_get_length()) {
ob_flush();
flush();
}
}
return @fclose($handle);
}
/**
* Filter headers for IE to fix issues over SSL.
*
* IE bug prevents download via SSL when Cache Control and Pragma no-cache headers set.
*
* @param array $headers
* @return array
*/
public static function ie_nocache_headers_fix($headers) {
if (is_ssl() && ! empty($GLOBALS['is_IE'])) {
$headers['Cache-Control'] = 'private';
unset($headers['Pragma']);
}
return $headers;
}
/**
* Die with an error message if the download fails.
* @param string $message
* @param string $title
* @param integer $status
* @access private
*/
private static function download_error($message, $title = '', $status = 404) {
if (! strstr($message, '<a ')) {
$message .= ' <a href="' . esc_url(home_url()) . '" class="wc-forward">' . __('Go to homepage', 'woocommerce') . '</a>';
}
wp_die($message, $title, array('response' => $status));
}
}
WC_Download_Handler :: init();
- 1. ähnliche Produkte sind nicht vollständig
- 2. erhalten Sie alle Produkte, die in verschachtelten Kategorien sind
- 3. Xquery für alle Knoten bestimmen, sind einzigartig
- 4. virtuelle ip und echte ip ports kombination sind sie einzigartig?
- 5. Deaktivieren Sie alle Eingänge, stellen Sie den Fokus auf den nächsten, sobald sie wieder aktiviert sind
- 6. Mit tmux verlieren alle meine Bash-Aliase, wie kann ich sie dazu bringen, zu bleiben?
- 7. Holen Sie sich alle Produkte im Warenkorb statt der letzten
- 8. Sind Functor-Instanzen einzigartig?
- 9. Ich kann meine Produkte im Backend nicht bearbeiten
- 10. Ich brauche meine Timer synchronisiert
- 11. bash: Kürzen Dateinamen, sie einzigartig zu halten
- 12. Schreiben Sie eine SQL, um meine Anforderung zu erfüllen
- 13. Überprüfen Sie, ob meine IP ist einzigartig im Vergleich zu vorherigen
- 14. Magento - Programmatisch hinzugefügte Produkte werden nicht angezeigt
- 15. Ich brauche die drei div im Bereich zu zentriert werden
- 16. Warum werden meine JavaScript-abhängigen Feature-Spezifikationen weitergegeben, wenn sie nicht im Javascript-Modus sind?
- 17. Kann nicht alle Produkte anzeigen
- 18. Holen Sie sich Produkte Episerver Commerce
- 19. Running Ruby-Skript im Terminal sollte "wach bleiben" und nicht zu beenden, sobald es an das Ende der Datei
- 20. Das Sammeln der Async Ergebnisse sobald sie verfügbar sind
- 21. Verwenden Sie Vektorgrafik für iOS-Startbild im Asset-Katalog?
- 22. Sind Lokijs IDs einzigartig?
- 23. So wählen Sie die Produkte aus, die nicht im Monat August verschickt werden
- 24. Magento - Es gab ein Problem mit reindexing Prozess - Katalog Produkte
- 25. Solr Search Facetten: Wie kann ich sie Produkte und NICHT Produktsorten zählen
- 26. Magento - SQL - Wählen Sie alle Produkte nach Attribut und aktualisieren Sie sie
- 27. RestKit: Wie mehrere Anfragen zu Batch und eine Antwort erhalten, sobald sie fertig sind?
- 28. So entfernen Sie alle Katalogprodukte in Magento
- 29. Überprüfen Sie alle Post-Werte = ja und sind nicht leer
- 30. Ich brauche die Ellipse, um zentriert zu bleiben und entlang der Länge der Linie hin und her zu gehen