PHP, WordPress

EdiSES – Prodotti Disabilitati

SELECT DISTINCT cpe.entity_id, cpe.sku, cpev_name.value AS product_name
FROM catalog_product_entity AS cpe
JOIN catalog_product_entity_int AS cpei_visibility ON cpe.entity_id = cpei_visibility.entity_id
JOIN catalog_product_entity_int AS cpei_status ON cpe.entity_id = cpei_status.entity_id
JOIN cataloginventory_stock_item AS csi ON cpe.entity_id = csi.product_id
JOIN catalog_product_entity_varchar AS cpev_name ON cpe.entity_id = cpev_name.entity_id
WHERE cpei_status.attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'status' AND entity_type_id = 4)
AND cpei_status.value = 1 /* Stato abilitato */
AND cpei_visibility.attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'visibility' AND entity_type_id = 4)
AND cpei_visibility.value = 2 /* Visibilità solo catalogo */
AND csi.manage_stock = 1 /* Gestione inventario non disponibile */
AND cpev_name.attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'name' AND entity_type_id = 4);

fare riferimento allo script prodotti-disabilitati.php
// TODO
abilitare eliminazione record _rivolgiti_libreria se già esistente

PHP, WordPress

CSV Attributi completi

<?php
// Connessione al database WooCommerce
$servername = "localhost";
$username = "fabio";
$password = "aaa";
$dbname = "ed_imp";
$conn = new mysqli($servername, $username, $password, $dbname);

// Verifica della connessione
if ($conn->connect_error) {
    die("Connessione fallita: " . $conn->connect_error);
}

function rimuoviAccenti($stringa) {
    $mappatura = array(
        'à' => 'a', 'è' => 'e', 'ì' => 'i', 'ò' => 'o', 'ù' => 'u',
        'À' => 'A', 'È' => 'E', 'Ì' => 'I', 'Ò' => 'O', 'Ù' => 'U',
        'á' => 'a', 'é' => 'e', 'í' => 'i', 'ó' => 'o', 'ú' => 'u',
        'Á' => 'A', 'É' => 'E', 'Í' => 'I', 'Ó' => 'O', 'Ú' => 'U',
        // Aggiungi altre mappature se necessario
    );

    return strtr($stringa, $mappatura);
}

// Normalizza i nomi delle colonne per risolvere i duplicati
function normalizzaNomeColonna($nome) {
    $nome = str_replace([' ', '-'], '_', $nome);
    $nome = rimuoviAccenti($nome);

    // Rinomina le colonne duplicate
    switch ($nome) {
        case 'numero_pagine':
            return 'numero_pagine2';
        case 'isbn':
            return 'isbn2';
        case 'sottotitolo':
            return 'sottotitolo2';
        case 'tag':
            return 'tag2';
        case 'codice_prodotto':
            return 'codice_prodotto2';
        case 'ricerca_ebook':
            return 'ricerca_ebook2';
        default:
            return $nome;
    }
}


// Modifica della prima query per includere sku_woocommerce_magento e MAGENTO_ID
$sql = "SELECT
            p.ID as id_prodotto,
            p.post_title as nome_prodotto,
            p.post_name as slug_prodotto,
            pm.meta_value as attributi_serializzati,
            sku_meta.meta_value as sku_woocommerce_magento,
            cpe.entity_id as MAGENTO_ID
        FROM
            ed2024_posts p
        JOIN
            ed2024_postmeta pm ON p.ID = pm.post_id
        LEFT JOIN
            ed2024_postmeta sku_meta ON p.ID = sku_meta.post_id AND sku_meta.meta_key = '_sku'
        LEFT JOIN
            catalog_product_entity cpe ON sku_meta.meta_value = cpe.sku
        WHERE
            p.post_type = 'product' AND pm.meta_key = '_product_attributes'";

$result = $conn->query($sql);

// Inizializza un array per tenere traccia di tutti i nomi degli attributi
$attributi_header = array('id_prodotto', 'nome_prodotto', 'slug_prodotto', 'MAGENTO_ID');
$attributi_rows = array();

// Elabora i risultati della prima query e costruisci l'array degli attributi
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $attributi = unserialize($row['attributi_serializzati']);
        $attributi_row = array(
            'id_prodotto' => $row['id_prodotto'],
            'nome_prodotto' => $row['nome_prodotto'],
            'slug_prodotto' => $row['slug_prodotto'],
            'MAGENTO_ID' => $row['MAGENTO_ID'] ?? ''
        );

        
        foreach ($attributi as $nome_attributo => $dettagli_attributo) {

            $nome_attributo = normalizzaNomeColonna($nome_attributo);
           
            if (!in_array($nome_attributo, $attributi_header)) {
                $attributi_header[] = $nome_attributo;
            }
            $attributi_row[$nome_attributo] = $dettagli_attributo['value'] ?? $dettagli_attributo['name'] ?? '';
        }
        $attributi_rows[$row['id_prodotto']] = $attributi_row;
    }
} else {
    echo "Nessun risultato trovato per la prima query";
}

// Seconda query per ottenere informazioni aggiuntive
$sql2 = "SELECT
            t.name AS attribute_name,
tt.taxonomy AS attribute_taxonomy,
tr.object_id AS product_id,
p.post_title AS product_name,
p.post_name as slug_prodotto
FROM
ed2024_terms t
JOIN
ed2024_term_taxonomy tt ON t.term_id = tt.term_id
JOIN
ed2024_term_relationships tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
JOIN
ed2024_posts p ON tr.object_id = p.ID
WHERE
p.post_type = 'product'
ORDER BY
p.ID, tt.taxonomy;";

$result2 = $conn->query($sql2);

// Elabora i risultati della seconda query
if ($result2->num_rows > 0) {
while($row2 = $result2->fetch_assoc()) {
$product_id = $row2['product_id'];
$attribute_taxonomy = $row2['attribute_taxonomy'];
$attribute_name = $row2['attribute_name'];


    // Aggiungi il nuovo header se non esiste
    if (!in_array($attribute_taxonomy, $attributi_header)) {
        $attributi_header[] = $attribute_taxonomy;
    }

    // Assicurati che l'array per questo prodotto esista
    if (!isset($attributi_rows[$product_id])) {
        $attributi_rows[$product_id] = array(
            'id_prodotto' => $product_id, 
            'nome_prodotto' => $row2['product_name'],
            'slug_prodotto' => $row2['slug_prodotto']
        );
    }

    // Aggiorna l'array dei dati del prodotto
    $attributi_rows[$product_id][$attribute_taxonomy] = $attribute_name;
}
} else {
    echo "Nessun risultato trovato per la seconda query";
    }
    
    // Creazione del file CSV
    $csvFileName = 'export-semi-pro-magento-id.csv';
    $csvFile = fopen($csvFileName, 'w');
    
    // Scrivi l'intestazione nel file CSV
    fputcsv($csvFile, $attributi_header);
    
    // Scrivi i valori degli attributi nel file CSV
    foreach ($attributi_rows as $product_id => $attributi_row) {
    $csvRow = array();
    foreach ($attributi_header as $header) {
    $csvRow[] = $attributi_row[$header] ?? '';
    }
    fputcsv($csvFile, $csvRow);
    }
    
    // Chiudi la connessione al database e il file CSV
    $conn->close();
    fclose($csvFile);
    
    echo "File CSV creato con successo: " . $csvFileName;

 
    
/*
// Prepara la query di inserimento
$columns = implode(', ', array_map(function($col) { return '`' . $col . '`'; }, $attributi_header));
$placeholders = implode(', ', array_fill(0, count($attributi_header), '?'));
$insertQuery = "INSERT INTO export_table ($columns) VALUES ($placeholders)";

$stmt = $conn->prepare($insertQuery);
if (!$stmt) {
    die("Errore nella preparazione della query: " . $conn->error);
}

// Divide $attributi_rows in lotti da 50 record
$lotti = array_chunk($attributi_rows, 50);

foreach ($lotti as $lotto) {
    foreach ($lotto as $attributi_row) {
        // Converti tutti i valori dell'array in stringa
        $values = array_map('strval', array_values($attributi_row));

        // Crea un array di tipi (tutti 's' per stringa)
        $types = str_repeat('s', count($values));

        // Lega i parametri alla query
        $stmt->bind_param($types, ...$values);

        // Esegui la query
        if (!$stmt->execute()) {
            echo "Errore durante l'inserimento dei dati: " . $stmt->error;
        }
    }
}

echo "Inserimento dei dati nella tabella riuscito con successo.";

// Chiudi lo statement e la connessione al database
//$stmt->close();
*/
//$conn->close();

    ?>
WordPress

Pulire database WordPress/WooCommerce

Questa è una query SQL che seleziona tutte le colonne dalla tabella “wpgy_users” in cui la colonna “ID” è presente in una subquery che seleziona “user_id” dalla tabella “wpgy_usermeta” dove “meta_key” è uguale a ‘first_name’ e “meta_value” è nullo o vuoto. In sostanza, la query restituisce tutti gli utenti nella tabella “wpgy_users” che non hanno un valore presente nella colonna “first_name” della tabella “wpgy_usermeta”.

SELECT * FROM `wpgy_users`
WHERE `ID` IN (SELECT `user_id` FROM `wpgy_usermeta` WHERE `meta_key` = 'first_name' AND (`meta_value` IS NULL OR `meta_value` = ''));

Questa query elimina gli utenti dalla tabella wpgy_users che non hanno un nome impostato nel loro profilo utente (campo “first_name” della tabella wpgy_usermeta). Si consiglia di eseguire un backup dei dati prima di eseguire questa query.

DELETE FROM `wpgy_users`
WHERE `ID` IN (SELECT `user_id` FROM `wpgy_usermeta` WHERE `meta_key` = 'first_name' AND (`meta_value` IS NULL OR `meta_value` = ''));

Questa è una query SQL che seleziona tutte le colonne dalla tabella “wpgy_usermeta” dove la colonna “user_id” non è presente nella subquery che seleziona “ID” dalla tabella “wpgy_users” e la colonna “user_id” è presente in una subquery che seleziona “user_id” dalla tabella “wpgy_usermeta” dove “meta_key” è uguale a ‘first_name’ e “meta_value” è nullo o vuoto. In pratica, la query restituisce tutti i record nella tabella “wpgy_usermeta” che hanno un valore nullo o vuoto nella colonna “first_name” e non sono presenti nella tabella “wpgy_users”.

SELECT * FROM `wpgy_usermeta`
WHERE `user_id` NOT IN (SELECT `ID` FROM `wpgy_users`)
  AND `user_id` IN (SELECT `user_id` FROM `wpgy_usermeta` WHERE `meta_key` = 'first_name' AND (`meta_value` IS NULL OR `meta_value` = ''));

Questa query SQL elimina i meta-dati degli utenti che non esistono nella tabella wpgy_users e che non hanno un nome impostato nel loro profilo utente dalla tabella wpgy_usermeta:

DELETE FROM `wpgy_usermeta`
WHERE `user_id` NOT IN (SELECT `ID` FROM `wpgy_users`)
  AND `user_id` IN (SELECT `user_id` FROM `wpgy_usermeta` WHERE `meta_key` = 'first_name' AND (`meta_value` IS NULL OR `meta_value` = ''));

PHP, WordPress

Plugin Cart Flatsome

file woocommerce-cart-add-ons.php

cercare la linea <ul class=”products sfn-cart-addons”>

<ul class="products sfn-cart-addons row large-columns-4 medium-columns-3 small-columns-1 row-small">

 

AGGIUNGI AL FILE woocommerce-cart-add-ons.php (riga 71 circa)

//checkout page
add_action('woocommerce_after_checkout_form', array($this, 'cart_display_addons'), 20);

 

WordPress

Cercare utilizzo Coupon WooCommerce

Questo snipet di codice consente di ricercare un codice coupon nelle tabelle giuste e di estrapolare l’indirizzo email di chi lo ha utilizzato

SELECT meta_value as EMAIL_CLIENTE from wpdx_postmeta WHERE 
meta_key = '_billing_email'
AND
post_id IN (
SELECT order_id FROM wpdx_woocommerce_order_items WHERE order_item_name = 'domini30anni'
);

VERSIONE POTENTE – Cerca da una certa data in poi o in un range di date

SELECT meta_value as EMAIL_CLIENTE from wpdx_postmeta WHERE 
meta_key = '_billing_email'
AND
post_id IN (
SELECT post_id as ID from wpdx_postmeta WHERE 
meta_key = '_completed_date' AND meta_value >= '2019-03-05'
AND
meta_key = '_completed_date' AND meta_value <= '2019-03-30'
AND
post_id IN (
SELECT order_id FROM wpdx_woocommerce_order_items WHERE order_item_name = 'domini30anni'
));

 

javascript, jQuery, PHP, WordPress

Woocommerce Checkout – Configurazione campi

	function newFieldCheck(){
		
		//controlliamo di essere nella pagina giusta

		if (is_checkout()) {
	
		?>

			<script type="text/javascript">
				
			jQuery( document ).ready(function( $ ) {  
				
			// nascondo i campi di fatturazione
			
			$('#ragione_sociale_field').hide();
			$('#partita_iva_field').hide();
			$('#codice_destinatario_field').hide();
			$('#pec_field').hide();

				
			 // imposto un trigger sul campo di richiesta di fatturazione
			 	
			  $('#fattura_ricevuta').on('change', function (e) {
				  
// 				    var optionSelected = $("option:selected", this);
				    var valueSelected = this.value;
				    
				    if (valueSelected == 'SI'){
					    
					    $('.optional').hide();  //rimuovo la scritta opzionale sui campi di fatturazione
					    
					    	$('#ragione_sociale_field').show();
							$('#partita_iva_field').show();
							$('#codice_destinatario_field').show();
							$('#pec_field').show();		    			 
				    } 
				     
				     if (valueSelected == 'NO') {
					    
					    	$('#ragione_sociale_field').hide();
							$('#partita_iva_field').hide();
							$('#codice_destinatario_field').hide();
							$('#pec_field').hide();		    		    
				    }

				  
			  });				
				
			});  //end ready


			</script>
	
	
		<?php
			
		}
		
		
	} //end cpCheck



add_action('woocommerce_before_checkout_form', 'newFieldCheck');

 

 

 function validazioneFattura() {

		    $fattura = filter_input(INPUT_POST, 'fattura_ricevuta');
		    $ragione_sociale = filter_input(INPUT_POST, 'ragione_sociale');
   		    $piva = filter_input(INPUT_POST, 'partita_iva');
   		    $sdi = filter_input(INPUT_POST, 'codice_destinatario');
   		    $pec = filter_input(INPUT_POST, 'pec');
   		    $codice_fiscale = filter_input(INPUT_POST, 'codice_fiscale');

   			
   			if (strlen($codice_fiscale) != 16) {
		        wc_add_notice(__('<strong>Codice Fiscale:</strong> Errore, controlla i dati inseriti.'), 'error');
		    }

		
		    if ($fattura == 'SI' AND $ragione_sociale == '') {
		        wc_add_notice(__('<strong>Errore</strong>, devi inserire una Ragione Sociale'), 'error');
		    }
		    
		    // check partita iva  30/04/2019 - 16:30
		    
			if (($fattura == 'SI' AND strlen($piva) != 11) or ($fattura == 'Fattura' AND $piva == ''))  {
		        wc_add_notice(__('<strong>Partita IVA</strong>, Errore, controlla i dati inseriti'), 'error');
		    }
		    
		    // controllo fatturazione elettronica 24/02/2019 - 13:32
		    
		    if ($fattura == 'SI' AND $pec == '' AND $sdi == ''){
		        wc_add_notice(__('<strong>Errore</strong>, devi inserire un Codice Destinatario o un indirizzo PEC'), 'error');
		    }
			   
		    
		}
		
		add_action('woocommerce_checkout_process', 'validazioneFattura');