5

Sto cercando e provandolo per 2 giorni senza esito positivo, per favore aiuto.Dettagli ordine amministratore Woocommerce - Mostra dati personalizzati nella pagina dei dettagli dell'ordine

Desidero filtrare gli ordini di woocommerce per aggiungere ulteriori dettagli da db alla pagina dei dettagli dell'ordine in base all'attributo del prodotto ma non riesco a trovare l'azione woocommerce/hook del filtro corretto per questa attività. Qui supponiamo di avere variabile $is_customized = false;

Se $is_customized == true ho quindi bisogno di aggiungere dati personalizzati dal database alla pagina dei dettagli degli ordini.

NOTA: Non voglio aggiungere box meta ulteriore invece voglio cambiare l'ordine tabella di dettaglio per:

  • sostituendo l'immagine di default del prodotto con l'immagine memorizzata nel database e,
  • Aggiunta di un div contenente gli attributi personalizzati sotto il nome del prodotto.

Ho tutti questi valori nelle variabili ma non riesco a capire quale hook di azione dovrei usare.

Ho allegato un'immagine per chiarimenti.

enter image description here

solo bisogno di sapere se posso cambiare/filtrare questi risultati ordine e quanto?

Apprezzo per il vostro tempo e l'aiuto. Grazie

+0

Come tutte le altre colonne di tipo messaggio personalizzato vengono gestiti tramite [ 'gestire $ tipo messaggio messaggi columns'] (https://codex.wordpress.org/Plugin_API/Filter_Reference/manage_$post_type_posts_columns) e ['gestisci $ post type posts custom column'] (https://codex.wordpress.org/Plugin_API/Action_Reference/manage_$post_type_posts_custom_column). E nel caso di ordini il tipo di post è 'shop_order'. – helgatheviking

+0

Non importa, ho appena guardato più da vicino il tuo screenshot e non è quello che stavo pensando. Detto questo, è una metabox, quindi nel peggiore dei casi è possibile rimuoverla e aggiungere una versione modificata al suo posto. – helgatheviking

+0

significa che non è disponibile alcuna azione/filtro per filtrare questi risultati o personalizzarli invece di riscrivere l'intero modulo? –

risposta

8

Ecco un inizio su come visualizzare alcuni dati aggiuntivi sul gancio woocommerce_before_order_itemmeta:

add_action('woocommerce_before_order_itemmeta', 'so_32457241)before_order_itemmeta', 10, 3); 
function so_32457241_before_order_itemmeta($item_id, $item, $_product){ 
    echo '<p>bacon</p>'; 
} 

io non so come si sta salvando i dati, quindi non posso fare più di una più precisa suggerimento. Tieni presente che subito dopo quel gancio, tutto ciò che hai salvato come oggetto meta verrà automaticamente visualizzato.

Il filtraggio dell'immagine è più difficile. Ho trovato questo gist come inizio, ma richiede alcune regole condizionali personalizzate in quanto non si vuole filtrare la miniatura ovunque, ma solo negli ordini.

Edit: Attualmente il meglio che posso fare per filtrare i thumbnails dell'articolo:

add_filter('get_post_metadata', 'so_32457241_order_thumbnail', 10, 4); 
function so_32457241_order_thumbnail($value, $post_id, $meta_key, $single) { 
    // We want to pass the actual _thumbnail_id into the filter, so requires recursion 
    static $is_recursing = false; 
    // Only filter if we're not recursing and if it is a post thumbnail ID 
    if (! $is_recursing && $meta_key === '_thumbnail_id') { 
     $is_recursing = true; // prevent this conditional when get_post_thumbnail_id() is called 
     $value = get_post_thumbnail_id($post_id); 
     $is_recursing = false; 
     $value = apply_filters('post_thumbnail_id', $value, $post_id); // yay! 
     if (! $single) { 
      $value = array($value); 
     } 
    } 
    return $value; 
} 


add_filter('post_thumbnail_id', 'so_custom_order_item_thumbnail', 10, 2); 
function so_custom_order_item_thumbnail($id, $post_id){ 
    if(is_admin()){ 
     $screen = get_current_screen(); 
     if($screen->base == 'post' && $screen->post_type == 'shop_order'){ 
      // this gets you the shop_order $post object 
      global $post; 

      // no really *good* way to check post item, but could possibly save 
      // some kind of array in the order meta 
      $id = 68; 
     } 
    } 
    return $id; 
} 
+0

Grazie mille, è esattamente la cosa che sto cercando. Puoi dirmi come posso sostituire anche l'immagine? E ho anche bisogno di un filtro per quantità qui. Significa che non voglio visualizzare la quantità se la condizione è vera. –

+0

Più lo guardo, più penso che il filtraggio dell'immagine sarà * molto * difficile e probabilmente richiede l'aggiunta di alcuni filtri a WooCommerce. In generale è abbastanza facile da fare, ma la funzione 'get_post_thumbnail_id()' si basa esclusivamente su '$ post_id' e non c'è attualmente modo che io possa vedere per inviare' $ order_item', che è la versione del prodotto che è unico che quell'ordine particolare. – helgatheviking

+0

sì, lasciami spiegare. In realtà è uno strumento di progettazione e ogni cliente progetterà il proprio prodotto e ovviamente l'immagine del prodotto sarà diversa ogni volta. Ho aggiunto con successo dati e immagini personalizzati dalla sessione al carrello e poi gli ordini, ma sono bloccato qui. Il nome dell'immagine del prodotto è in db e posso ottenerlo tramite l'ID ordine ma come eseguire l'override? Questo è il punto principale. –