Em todo cálculo de frete por vendedor, o Frete para Marketplace adiciona campos próprios à estrutura de pacote padrão do WooCommerce. Esta página documenta esses campos — útil quando você está escrevendo um filtro custom em cima do split.
A struct completa
Um pacote pós-split tem todos os campos nativos do WooCommerce mais os campos wcsp_* adicionados pelo plugin:
$package = array(
// === Campos do plugin ===
'wcsp_vendor_id' => 123, // int — ID do usuário do vendedor
'wcsp_vendor_name' => 'Loja do João', // string — nome da loja
'wcsp_vendor_postcode' => '01001-000', // string — CEP de origem do vendedor
// === Campos nativos do WooCommerce ===
'contents' => array( /* itens do vendedor */ ),
'contents_cost' => 150.00,
'applied_coupons' => array(),
'destination' => array(
'country' => 'BR',
'state' => 'SP',
'postcode' => '04567-890',
'city' => 'São Paulo',
'address' => 'Rua...',
'address_2'=> 'Apt...',
),
'user' => array(
'ID' => 1,
),
// === Campos adicionais por marketplace ===
'vendor_id' => 123, // Dokan, WCFM, WC Marketplace usam essa chave
'seller_id' => 123, // Dokan usa essa chave
'extra_package_data' => array( ... ),// Marketplace-specific
);
Os campos wcsp_* em detalhe
wcsp_vendor_id
int — ID do usuário WordPress do vendedor responsável pelo pacote.
Quando usar: quando você precisa identificar qual vendedor é o "dono" do pacote (pra aplicar regras específicas, sobretaxas, descontos, telemetria).
add_filter( 'woocommerce_package_rates', function( $rates, $package ) {
$vendor_id = $package['wcsp_vendor_id'] ?? null;
if ( ! $vendor_id ) {
return $rates;
}
// ...
}, 10, 2 );
wcsp_vendor_name
string — nome de exibição da loja do vendedor. É o mesmo nome que aparece no checkout como título do pacote (antes de passar pelo filtro wcsp_package_name).
Quando usar: pra logging, mensagens de erro, integrações que precisam exibir o nome ao cliente sem ter que rebuscar no banco.
wcsp_vendor_postcode
string — CEP de origem do vendedor. É o resultado final do filtro wcsp_vendor_postcode aplicado ao vendedor.
Quando usar: quando você está escrevendo integração com um método de envio custom que precisa do CEP de origem.
add_filter( 'meu_metodo_envio_origem', function( $origem, $package ) {
$cep = $package['wcsp_vendor_postcode'] ?? '';
if ( $cep ) {
return $cep;
}
return $origem;
}, 10, 2 );
Campos adicionais por marketplace
Cada marketplace adiciona seus próprios campos no pacote pra manter compatibilidade com integrações nativas:
Dokan
vendor_id(mesmo valor dewcsp_vendor_id) — usado por hooks Dokan.seller_id— adicionado também às taxas de envio (WC_Shipping_Rate) pra associação do pedido ao vendedor.
WCFM
vendor_idprocessing_time— tempo de processamento do vendedor (se preenchido), em dias.pickup_address— endereço de coleta separado (se preenchido).
WC Marketplace
vendor_idextra_package_data— array com dados específicos do plugin pra fulfillment.
YITH, WC Vendors
vendor_id consistente, sem campos adicionais especiais.
Lendo do pacote dentro de filtros
Em qualquer filtro que receba o $package, esses campos estão disponíveis. Exemplos:
// Sobretaxar pacote do vendedor 42 em 10%
add_filter( 'woocommerce_package_rates', function( $rates, $package ) {
if ( ( $package['wcsp_vendor_id'] ?? 0 ) === 42 ) {
foreach ( $rates as $rate ) {
$rate->cost *= 1.10;
}
}
return $rates;
}, 10, 2 );
// Logar nome da loja em desenvolvimento
add_filter( 'wcsp_package_name', function( $name, $vendor_id, $package ) {
error_log( sprintf( 'Calculando frete pra %s', $package['wcsp_vendor_name'] ) );
return $name;
}, 10, 3 );
Em alguns fluxos (ex: simulador de frete sem produto vinculado a vendedor) os campos wcsp_* podem não estar preenchidos. Use ?? null ou ?? '' pra evitar warnings em PHP 8+.
Filtros relacionados
wcsp_vendor_postcode— preenche owcsp_vendor_postcodedo pacote.wcsp_package_name— usawcsp_vendor_nameno resultado.- Filtros dos métodos de envio — todos recebem o
$packagecom os camposwcsp_*.