Woocommerce - Classifique os produtos no carrinho por autor / usuário na configuração de vários fornecedores

GLM

Tenho uma loja Woocommerce de vários fornecedores usando o plugin Dokan e estou tentando dividir o carrinho de compras em seções com base em quem é o fornecedor. Por exemplo:

  • Vendedor 1
    • Produto C
    • Produto B
  • Vendedor 2
    • Produto A

Dokan usa uma função personalizada de 'fornecedor' para estender a classe de usuário, portanto, para obter o ID dos fornecedores, devo ser capaz de usar algo como:

$post_data = get_post( $cart_item['product_id'] ); 
$vendor_id = $post_data->post_author;

Isso funciona, mas só obterá a primeira ID do fornecedor e simplesmente a repetirá para todos os produtos restantes no carrinho. Eu sei que isso é porque não estou recuperando uma matriz, mas realmente não consigo encontrar nada na documentação do WP sobre como obter uma matriz de IDs de autor (diferente de wp_list_authors, mas isso não funciona bem).

Como um experimento, consegui fazer a divisão + classificação funcionar, desde que eu esteja classificando por categorias, já que posso usar wp_get_post_terms (). Não posso replicar isso para os dados do autor, embora ...

O código atual (relevante) está abaixo:

<?php
$cat_sort = array();

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
  $product_id = $cart_item['product_id'];
  $cat_ids = wp_get_post_terms( $product_id, 'product_cat', array( 'fields' => 'ids' ) );

  foreach ( $cat_ids as $id ) {
    $cat_sort[$id][$cart_item_key] = $cart_item;
  }                                                    

}

ksort( $cat_sort ); 

$grouped_cart_items = array();
  foreach ( $cat_sort as $cat_id => $cart_items ) {
    $term = get_term( $cat_id, 'product_cat' );                           
?>
<tr>
  <td colspan="6" class=""><strong><?php echo $term->name; ?></strong></td>
</tr>

(Depois disso, vem o loop do produto real, que não deve ser importante aqui, porque sua ordem de classificação acontece no código acima)

Alguma ideia de como posso obter informações do autor para os produtos do carrinho da mesma forma que posso obter as categorias? Estou muito perplexo ...

Agradecemos antecipadamente por toda e qualquer ajuda!

LoicTheAztec

Aqui está um exemplo de como classificar e exibir itens do carrinho por nome da loja do fornecedor Dokan:

<table>
<?php

$car_items  = WC()->cart->get_cart(); // Cart items

$items_sort = array(); // Initializing

// Loop through cart items
foreach ( $car_items as $cart_item_key => $cart_item ) {
    // Get the vendor_id
    $vendor_id   = get_post_field( 'post_author', $cart_item['product_id'] );

    $store_info  = dokan_get_store_info( $vendor_id ); // Get the store data
    $store_name  = $store_info['store_name'];          // Get the store name

    // Set in multidimentional array the vendor and then the cart item key
    $items_sort[$store_name][$cart_item_key] = $vendor_id;
}

if ( count($car_items) > 1 ) {
    ksort( $items_sort ); // Sorting by vendor name
}

// 1st Loop by vendor name
foreach ( $items_sort as $store_name => $values ) {
    $vendor_id  = reset($values); // The vendor id
    /$store_url = dokan_get_store_url( $vendor_id );  // Get the store URL (if needed)
    ?>
    <tr>
        <!-- Store name display -->
        <td colspan="6" class="store-name"><strong><?php echo $store_name; ?></strong></td>
    </tr>
    <?php
    // 2nd Loop the cart items for the vendor name
    foreach( $values as $cart_item_key => $vendor_id) {

        // Retreive the cart item from the cart item key
        $cart_item = $car_items[$cart_item_key];
        ?>
        <tr>
            <!-- Product name display -->
            <td colspan="6" class="product-name"><?php echo $cart_item['data']->get_name(); ?></td>
        </tr>
        <?php

    } // End of 2nd Loop

} // End of 1st Loop

?>
</table>

Relacionado: Exibir o nome do fornecedor dokan nas páginas de produtos únicos do Woocommerce

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    UITextView não está exibindo texto longo

  3. 3

    Dependência circular de diálogo personalizado

  4. 4

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  5. 5

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  6. 6

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  7. 7

    Setas rotuladas horizontais apontando para uma linha vertical

  8. 8

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  9. 9

    Definir um clipe em uma trama nascida no mar

  10. 10

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  11. 11

    Como dinamizar um Dataframe do pandas em Python?

  12. 12

    regex para destacar novos caracteres de linha no início e no fim

  13. 13

    Why isn't my C# .Net Core Rest API route finding my method?

  14. 14

    Como obter a entrada de trás de diálogo em treeview pyqt5 python 3

  15. 15

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  16. 16

    How to create dynamic navigation menu select from database using Codeigniter?

  17. 17

    Como recuperar parâmetros de entrada usando C #?

  18. 18

    Changing long, lat values of Polygon coordinates in python

  19. 19

    Livros sobre criptografia do muito básico ao muito avançado

  20. 20

    Método \ "POST \" não permitido no framework Django rest com ações extras & ModelViewset

  21. 21

    Pesquisa classificada, conte números abaixo do valor desejado

quentelabel

Arquivo