Commit inicial - WordPress Análisis de Precios Unitarios

- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-11-03 21:04:30 -06:00
commit a22573bf0b
24068 changed files with 4993111 additions and 0 deletions

View File

@@ -0,0 +1,259 @@
<?php
/**
* Class to control breadcrumb and its behaviour accross the buildwoofunnels
* @author buildwoofunnels
*/
if ( ! class_exists( 'BWF_Admin_Breadcrumbs' ) ) {
#[AllowDynamicProperties]
class BWF_Admin_Breadcrumbs {
private static $ins = null;
/**
* @var array nodes use to contain all the nodes
*/
public static $nodes = [];
/**
* @var array ref used to contain refs to pass to the urls
*/
public static $ref = [];
/**
* Insert a single node into the property
*
* @param $config [] of the node getting registered
*/
public static function register_node( $config ) {
self::$nodes[] = wp_parse_args( $config, [ 'class' => '', 'link' => '', 'text' => '' ] );
}
/**
* Insert a referral property so that we can populate the referral across all urls.
*
* @param $key
* @param $val
*/
public static function register_ref( $key, $val ) {
self::$ref[ $key ] = $val;
}
/**
* Render HTML for all the registered nodes
*/
public static function render() {
if ( empty( self::$nodes ) ) {
return '';
}
$last_item = end( self::$nodes );
?>
<ul>
<li class="<?php echo esc_attr( $last_item['class'] ) ?>">
<?php echo wp_kses_post( $last_item['text'] ); ?>
</li>
</ul>
<?php
}
/**
* rearrange all the collected nodes and maybe print them
*
* @param false $return_nodes should just return nodes or print
*
* @return array|false
*/
public static function render_top_bar( $return_nodes = false ) {
if ( empty( self::$nodes ) ) {
return false;
}
if ( ! is_array( self::$nodes ) || count( self::$nodes ) == 0 ) {
return false;
}
self::$nodes = array_filter( self::$nodes, function ( $v ) {
if ( isset( $v['text'] ) && ! empty( $v['text'] ) ) {
return true;
}
} );
if ( ! is_array( self::$nodes ) || count( self::$nodes ) == 0 ) {
return false;
}
if ( true === $return_nodes ) {
return self::$nodes;
}
$count = count( self::$nodes );
$h = 0;
foreach ( self::$nodes as $menu ) {
if ( ! isset( $menu['text'] ) || empty( $menu['text'] ) ) {
continue;
}
$h ++;
echo '<span>';
if ( $count !== $h && isset( $menu['link'] ) && ! empty( $menu['link'] ) ) {
echo '<a href="' . esc_url($menu['link']) . '">' . $menu['text'] . '</a>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
} else {
echo $menu['text']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
echo '</span>';
}
return self::$nodes;
}
/**
* Add the registered referral to the url passed
* ref should contain the query param as key and value as value
*
* @param $url URL to add refs to
*
* @return string modified url
*/
public static function maybe_add_refs( $url ) {
if ( empty( self::$ref ) ) {
return $url;
}
return add_query_arg( self::$ref, $url );
}
public static function render_sticky_bar() {
?>
<style>
/* Sticky Bar */
.bwf-header-bar {
background: #fff;
box-sizing: border-box;
border-bottom: 1px solid #fff;
padding: 0 0 0 20px;
min-height: 56px;
position: fixed;
width: 100%;
top: 32px;
z-index: 1001;
display: flex;
align-items: center;
box-shadow: 0 0px 10px 0 #c8c8c8
}
.bwf-header-bar > img {
max-width: 24px
}
.bwf-bar-navigation {
font-size: 16px;
padding-left: 15px;
display: flex
}
.bwf-bar-navigation > span {
padding-right: 25px;
position: relative
}
.bwf-bar-navigation > span a {
text-decoration: none;
font-weight: normal
}
.bwf-bar-navigation > span:after {
content: "\f345";
font-family: 'dashicons';
font-size: 15px;
position: absolute;
right: 4px;
top: 1px
}
.bwf-bar-navigation > span:last-child:after {
content: ""
}
.bwf-bar-quick-links {
display: flex;
flex-direction: row;
align-items: center;
position: fixed;
right: 0;
top: 32px;
height: 56px
}
.bwf-bar-quick-links a.bwf-bar-link {
display: block;
font-size: 13px;
height: 56px;
text-decoration: none;
text-align: center;
padding: 0 10px;
min-width: 70px;
transition: all 0.4s ease;
-webkit-transition: all 0.4s ease;
box-sizing: border-box
}
.bwf-bar-quick-links a.bwf-bar-link:hover {
background: #f0f0f0
}
.bwf-bar-quick-links a * {
display: block;
margin: 0 auto;
padding: 0;
float: none;
color: #757575
}
.bwf-bar-quick-links a i {
font-size: 20px;
color: #757575;
margin-top: 8px
}
.wrap.bwf-funnel-common {
padding: 60px 0 0 20px;
margin: 0 20px 0 0
}
.bwf-header-bar .bwf-breadcrub-svg-icon {
max-width: 35px;
}
</style>
<div class="bwf-header-bar">
<img class="bwf-breadcrub-svg-icon" src="<?php echo esc_url( plugin_dir_url( WooFunnel_Loader::$ultimate_path ) . 'woofunnels/assets/img/bwf-icon-white-bg.svg' ); ?>"/>
<div class="bwf-bar-navigation">
<?php
global $submenu;
if ( array_key_exists( 'bwf_dashboard', $submenu ) ) {
echo '<span><a href="' . esc_url(admin_url( 'admin.php?page=bwf_dashboard' )) . '">FunnelKit</a></span> ';
}
if ( method_exists( 'BWF_Admin_Breadcrumbs', 'render_top_bar' ) ) {
BWF_Admin_Breadcrumbs::render_top_bar();
}
?>
</div>
<div class="bwf-bar-quick-links">
<a class="bwf-bar-link" href="https://funnelkit.com/documentation/" target="_blank">
<i class="dashicons dashicons-format-chat"></i>
<span>Docs</span>
</a>
<a class="bwf-bar-link" href="https://funnelkit.com/support/" target="_blank">
<i class="dashicons dashicons-businessman"></i>
<span>Support</span>
</a>
</div>
</div>
<?php
}
}
}