]*)>(.*?)<\/tr>/is',
function($matches) use ($section_headers, $total_patterns) {
$tr_attrs = $matches[1];
$tr_content = $matches[2];
// Si ya tiene clase especial, no modificar
if (preg_match('/class\s*=\s*["\'][^"\']*(?:section-header|subtotal-row|total-row)/', $tr_attrs)) {
return $matches[0];
}
// Extraer texto de la segunda celda
if (!preg_match('/| ]*>.*?<\/td>\s* | ]*>(.*?)<\/td>/is', $tr_content, $cell_match)) {
return $matches[0]; // No hay segunda celda
}
$cell_text = trim(strip_tags($cell_match[1]));
// Determinar clase a agregar
$class_to_add = '';
// Verificar section-header
if (in_array($cell_text, $section_headers, true)) {
$class_to_add = 'section-header';
}
// Verificar subtotal-row
elseif (stripos($cell_text, 'suma de ') === 0 || stripos($cell_text, 'subtotal ') === 0) {
$class_to_add = 'subtotal-row';
}
// Verificar total-row
elseif (in_array($cell_text, $total_patterns, true)) {
$class_to_add = 'total-row';
}
// Si no hay clase que agregar, retornar sin modificar
if (empty($class_to_add)) {
return $matches[0];
}
// Agregar clase al |
' . $content . '
';
}
add_shortcode('apu_table', 'roi_apu_table_shortcode');
/**
* Shortcode: [apu_row type="tipo"]
* Facilita la creación de filas especiales en tablas APU
*
* Tipos disponibles:
* - section: Encabezado de sección (Material, Mano de Obra, etc)
* - subtotal: Fila de subtotal
* - total: Fila de total final
*
* Uso:
* [apu_row type="section"]
*