This is the technical support forum for WPML - the multilingual WordPress plugin.

Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.

This topic contains 22 risposte, has 2 voci.

Last updated by Alejandro 2 giorni, 13 ore fa.

Assigned support staff: Alejandro.

Autore Post
November 12, 2019 at 7:07 pm

User7887

Sto tentando di:

Visualizzare i prodotti tradotti in italiano nella corrispettiva categoria tradotta in italiano

Mi aspettavo di vedere:

Tutti i prodotti italiani correttamente associati alla categoria italiana

Invece ho ottenuto:

Molti prodotti mancano nella visualizzazione della categoria/categorie italiana (es. Women / Men).

NOTA:
1) Da backend si vedono tutti correttamente se cercati tramite categoria e si vede chiaramente che sono nella categoria italiana corretta (anche se da frontend non si vedono associati a tali categorie)
2) Se i prodotti mancanti, vengono ri-salvati tramite Woocommerce Multilingua, allora sono visualizzati correttamente (non è possibile però farli su tutti manualmente in quanto troppi, serve una soluzione automatizzata/bulk)

November 13, 2019 at 10:15 am #4937205

Alejandro
Supporter

Languages: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Timezone: Europe/Rome (GMT+01:00)

Mi potresti dare un riferimento di un prodotto che non compare in Italiano ma invece compare in Inglese?

November 16, 2019 at 4:44 pm #4959031

User7887

Certamente,
prova a visualizzare il seguente prodotto con indirizzo:
/it/prodotto/borsa-con-scritta/

Noterai che è nella categoria con slug: pochette-donna

Tuttavia se si naviga tale categoria (URL: /it/categoria-prodotto/prodotti/prodotti-donna/borse-donna/pochette-donna/), tale prodotto non compare, quando invece dovrebbe.

November 18, 2019 at 11:24 am #4964557

Alejandro
Supporter

Languages: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Timezone: Europe/Rome (GMT+01:00)

hidden link

Non sono sicuro di come hai creato la traduzione ma vedo che appena premo "aggiorna" sul prodotto originale, mi compare l'aggiornamento alla traduzione, il che vuol dire che qualcosa è stato modificato nel prodotto che però ancora non esiste nella traduzione.

Quindi puoi procedere ad aggiornare il prodotto di nuovo, e questo dovrebbe risolvere il problema.

Altrimenti puoi andare anche su WooCommerce > WooCommerce Multilingual > Settings > Troubleshooting > Segna tutto e premi "apply"

Saluti.

November 19, 2019 at 8:30 am #4969397

User7887

Ciao, grazie per la risposta ma quello che hai proposto non è possibile e ti spiego subito il perchè.

Il sistema fa uso di automazioni per importare i prodotti e non è possibile un intervento umano che "clicchi" Aggiorna su tutti i prodotti.
Inoltre, la sincronizzazione, con tutti i flag attivi, non risolve tale situazione.

Per di più, se si "estraggono" le categorie dei prodotti tramite codice (ovvero tramite la funzione di get_category_ids(), di WooCommerce), tali categorie sono corrette, nonostante il prodotto non compaia).

Inoltre, la traduzione di tali categorie NON risolve la problematica.

Prendiamo ad esempio il seguente prodotto:
/it/3665/sciarpa-logata

E concentriamoci sulla categoria: SCIARPE & FOULARD e CON SLUG: "sciarpe-foulard-uomo".

Noterai, ancora, che nel backend (oltre che nel fronted) tale categoria è settata, ma se vi navigo all'interno, andando all'url:
/it/categoria-prodotto/prodotti/prodotti-uomo/accessori-uomo/sciarpe-foulard-uomo

Il prodotto non compare, mentre dovrebbe. Nonostante la traduzione della categoria in italiano.

Se servisse, posso anche inoltrarti in privato, il codice utilizzo per automatizzare l'importazione dei prodotti.

Grazie

November 19, 2019 at 9:09 am #4969749

Alejandro
Supporter

Languages: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Timezone: Europe/Rome (GMT+01:00)

Ciao,

Si, sarebbe utile avere il codice per poter controllare se per caso da l' riusciamo a vedere perché non compaiono in questa categoria.

November 19, 2019 at 10:47 am
November 19, 2019 at 3:47 pm #4974003

Alejandro
Supporter

Languages: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Timezone: Europe/Rome (GMT+01:00)

Scusa ma se provo ad accedere a quel link mi da errore 404, anche da loggato.

Ho cercato pagine e post con quel nome e ho anche cercato in FTP ma non ho trovato il file, la cosa più simile che ho trovato si chiama imp_csv, è forse questo?

Vedendo quel file, ho visto che lì inserisci praticamente i dati alle nostre tabelle così come alle tabelle di WPML.

Questo è un po' fuori lo scopo del nostro supporto ma ora capisco perché anche l'altro ticket aveva uno slug non-unico (quando è impossibile che succeda quando WordPress li fa).

Mi sa che ti deve essere mancata qualche entrata nel database che colleghi le immagini, quindi ti consiglierei di fare un piccolo log delle queries del database quando aggiorni un prodotto con questo errore e paragonalo con la procedura del tuo codice, probabilmente riuscirai a capire dove si trova il problema.

Ecco una guida semplice per sapere come farlo:
hidden link

November 19, 2019 at 4:28 pm #4974349

User7887

Alejandro, intanto grazie ancora per il supporto, gentilissimo.

Tuttavia è proprio perchè utilizzo chiamate e funzioni WPML / WooCommerce Multilanguage ufficiali che non dovrebbero succedere. Utilizzo dunque gli hooks e le actions di WPML, nessuna iterazione col database diretta, dato che passo dalle vostre funzioni.

Per questo che tale comportamento non si spiega. Cosi come non si spiega il fatto che da backend il prodotto/categoria torna perfettamente, mentre da frontend vi sono queste anomalie. Pertanto sembra tutto e per tutto un bug (dato che, se il dato è sbagliato, tale errore dovrebbe comparire sia da back-office che nel frontend).

Ti pongo la domanda in un altro aspetto: perchè tecnicamente, il mio prodotto, viene visualizzato perfetto da backend (con la possibilità di vederlo nella corretta categoria), mentre da frontend no?

Grazie ancora

Edit: Si, proprio cosi, confermo che il file che carica i prodotti è esclusivamente imp_csv (ovvero la funzione imp_csv).

November 19, 2019 at 5:14 pm
November 20, 2019 at 1:39 pm #4980817

User7887

Alejandro, grazie ancora per il tuo tempo.
È una soluzione che percorrerei volentieri, solo che vi è il black friday imminente e non so se faremo in tempo (quanto dici che ci vorrebbe per l'eventuale risoluzione/individuazione del problema)?

Mi è venuto in mente il potenziale workaround temporaneo da attuare nel mentre:
Ho visto che se entro del Woocommerce Multilanguage e aggiorno il prodotto, il prodotto compare correttamente (come tra l'altro hai già constatato pure tu).
Non posso farlo manualmente per ogni prodotto, quindi la domanda, vi è una funzione o comanda richiamabile via codice che faccia "attivare" tutte le funzioni che entrano in gioco quando si preme sul bottone aggiorna? Quindi questo modo potrei aggiornare i prodotti in bulk. (perchè le funzioni di sync nel troubleshooting di wpml, purtroppo non risolvono il problema)

Grazie ancora

November 20, 2019 at 4:59 pm #4982449

Alejandro
Supporter

Languages: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Timezone: Europe/Rome (GMT+01:00)

Forse un semplice wp_update_post basterebbe. passa nell'array gli ID dei prodotti (ti consiglierei di farlo con soltanto un paio per vedere se funziona e poi puoi provare con gli altri)
https://developer.wordpress.org/reference/functions/wp_update_post/

Nell'array basterebbe definire il post-type e l'ID. assicurati di non mettere argomenti vuoti perché altrimenti verranno editati anche questi e cancelleranno tutto.

Altrimenti mi viene in mente l'uso di https://wpml.org/wpml-hook/wpml_sync_custom_field/
questo perché in WooCommerce la featured image sono un custom field: "_featured"
e forse questo potrebbe essere anche un metodo permanente da aggiungere al tuo script, cioè leggi i custom field della pagina originale e quelli che saranno messi come "copia" (quasi tutti gli importanti in WC) verranno sincronizzati con questa funzione.

Provaci e fammi sapere come va.

November 21, 2019 at 5:47 pm #4992069

User7887

Ciao Alejandro, ti aggiorno sulla esatta causa del problema (per cui non credo che i consigli che mi hai dato potranno funzionare.. dopo capirai il perchè).

La query principale che fa visualizzare i prodotti nel catalogo è la seguente (in questo caso è la query della lingua italiana:

	SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
LEFT JOIN wp_term_relationships
ON (wp_posts.ID = wp_term_relationships.object_id)
LEFT JOIN wp_icl_translations wpml_translations
ON wp_posts.ID = wpml_translations.element_id
AND wpml_translations.element_type = CONCAT('post_', wp_posts.post_type)
WHERE 1=1
AND ( wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (14,16) )
AND wp_term_relationships.term_taxonomy_id IN (692,691) )
AND wp_posts.post_type = 'product'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private')
AND ( ( ( wpml_translations.language_code = 'it'
OR ( wpml_translations.language_code = 'en'
AND wp_posts.post_type IN ( 'product' )
AND ( ( (
SELECT COUNT(element_id)
FROM wp_icl_translations
WHERE trid = wpml_translations.trid
AND language_code = 'it' ) = 0 )
OR ( (
SELECT COUNT(element_id)
FROM wp_icl_translations t2 JOIN wp_posts p
ON p.id = t2.element_id
WHERE t2.trid = wpml_translations.trid
AND t2.language_code = 'it'
AND ( p.post_status = 'publish'
OR p.post_type='attachment'
AND p.post_status = 'inherit' ) ) = 0 ) ) ) )
AND wp_posts.post_type IN ('post','page','attachment','wp_block','product','product_variation','wpcf7_contact_form','avada_portfolio','avada_faq','themefusion_elastic','slide' ) )
OR wp_posts.post_type NOT IN ('post','page','attachment','wp_block','product','product_variation','wpcf7_contact_form','avada_portfolio','avada_faq','themefusion_elastic','slide' ) )
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date ASC
LIMIT 0, 36

Il problema lo si può individuare nella seguente parte della query:

wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (14,16)

Tale parte esclude dai risultati i prodotti NON in stock (infatti, la tassonomia alla quale fa riferimento ha id 14 e 16, che rappresentano la tassonomia di Out of Stock).
Il problema è che tali prodotti NON dovrebbero avere tale tassonomia settata, perchè NON è vero che sono out of stock, sono "In Stock", tanto è che se si entra nel prodotto italiano si può vedere che vi è la quantità.

Il punto è quindi il seguente: come sincronizzare la tassonomia del prodotto inglese (che è corretta dato che i prodotti si vedono) con quella italiana? (in tal caso, la sincronizzazione dovrà rimuovere la tassonomia "out of stock" dai prodotti dove non è necessaria).

Sicuramente nell'editor di Woocommerce Multilangue, c'è tale funzione, in questo caso se uso tale strumento da backend e clicco su Salva (senza modificare nulla), il prodotto italiano riappare correttamente nel catalogo.

L'esigenza pertanto, è quella di richiamare tale funzioni/funzione da codice.
Vedo che nel plugin vi sono degli hooks/actions che potrebbero funzionare, ma manca la documentazione da parte di WPML per spiegare quando/come utilizzare quelle funzioni.

Rispondendo al tuo consiglio quindi:
- wp_update_post non penso che funzioni in quanto si parla di tassonomia gestita da woocommerce (appunto l'out of stock), quindi usando tale funzione ufficiale di WordPress, non credo gestisca anche la parte che risolverebbe la problematica a noi.
- wpml_sync_custom_field: sincronizza i custom field che quindi non dovrebbe esserci utile quando parliamo della tassonomia specifica.

Hai quindi idee in mente per come risolvere il problema via codice/bulk?

Grazie

November 22, 2019 at 4:07 pm #5000123

Alejandro
Supporter

Languages: Inglese (English ) Spagnolo (Español ) Italiano (Italiano )

Timezone: Europe/Rome (GMT+01:00)

Non ho capito bene una cosa.

Parli di una esclusione quando si tratta di un plugin out of stock che però sembra di applicarsi a prodotti IN stock, giusto (non so se ho capito bene)? non è che per caso questi prodotti sono stati out of stock in passato e la tassonomia non viene aggiornata?

Per quanto riguarda "wp_update_post ", puoi usarlo anche per i prodotti visto che questa funzione serve per qualunque tipo di post type, incluso quello che crea WooCommerce.

Prova per ora con questo, nel frattempo ho chiesto al nostro team di sviluppatori se c'è un hook per quello che desideri perché non sono molto sicuro di qualcosa che possa funzionare per questa tua problematica.

Vediamo cosa mi dicono.

November 25, 2019 at 4:19 pm #5015571

User7887

Ciao Alejandro,
No, tale funzione la eroga in modo ufficiale Woocommerce (senza nessun plugin dunque), è una impostazione che si può settare nelle impostazioni di Woocoomerce (ovvero mettere la "spunta" per nascondere tali prodotti che non hanno disponibilità). Quindi tale query è di Woocommerce

Riguardo a : non è che per caso questi prodotti sono stati out of stock in passato e la tassonomia non viene aggiornata?
Si è possibile, infatti è per quello che sarebbe utile una funzione/codice bulk per portarli in uno "stato" di correttezza.

Proverò con "wp_update_post". L'unica cosa di cui sono certo, è che in passato avevo già provato ad usarlo per sistemare dei post e avevo notato che, tale funzione, non fa "scattare" tutte le altre funzioni che invece si attivano quando si preme su "Save" della dashboard ti traduzione di Woocommerce Multilanguage. (e per la quale sarebbe utilissimo avere l'equivalente "save" ma richiamabile via codice)

Nel mentre, grazie mille ancora, attendo news sull'hook che ti diranno gli sviluppatori