HEX
Server: nginx/1.24.0
System: Linux DGT-WORDPRESS-VM-SERVER 6.14.0-1014-azure #14~24.04.1-Ubuntu SMP Fri Oct 3 20:52:11 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.4.12
Disabled: NONE
Upload Files
File: /mnt/data/truelysell-wp-demo/catering/wp-content/themes/truelysell/inc/woocommerce.php
<?php

/**
 * Change the Shop archive page title.
 * @param  string $title
 * @return string
 */

 
add_filter('loop_shop_columns', 'loop_columns', 999);
if (!function_exists('loop_columns')) {
    function loop_columns()
    {

        $layout = get_option('pp_shop_layout', 'full-width');

        if ($layout == 'full-width') {
            return 3;
        } else {

            return 2;
        }
    }
}
add_filter('product_cat_class', 'remove_category_class', 21, 3); //woocommerce use priority 20, so if you want to do something after they finish be more lazy
function remove_category_class($classes)
{
    if ('product' == get_post_type()) {
        $classes = array_diff($classes, array('last', 'first'));
    }
    return $classes;
}
/**
 * Change number or products per row to 3
 */
add_filter('loop_shop_columns', 'loop_columns', 999);
if (!function_exists('loop_columns')) {
    function loop_columns()
    {
        return 3; // 3 products per row
    }
}


add_filter('woocommerce_product_data_store_cpt_get_products_query', 'truelysell_exclude_listing_booking', 10, 2);

function truelysell_exclude_listing_booking($query, $query_vars)
{
    if (!empty($query_vars['exclude_listing_booking'])) {
        $query['tax_query'][] = array(
            'taxonomy' => 'product_type',
            'field'    => 'slug',
            'terms' => array('listing_booking'), // 
            'operator' => 'NOT IN'
        );
        $query['tax_query'][] = array(
            'taxonomy' => 'product_cat',
            'field' => 'slug',
            'terms' => array('truelysell-booking'), // Don't display products in the clothing category on the shop page.
            'operator' => 'NOT IN'
        );
    }
    return $query;
}

//add_filter('woocommerce_short_description', 'truelysell_woocommerce_short_description', 10, 1);
function truelysell_woocommerce_short_description($post_excerpt)
{
    global $product;
    if ($product->get_type() == "property_package") {

        $output = '<ul>';

        $jobslimit = $product->get_limit();
        if (!$jobslimit) {
            $output .= "<li>";
            $output .= esc_html__('Unlimited number of listings', 'truelysell');
            $output .=  "</li>";
        } else {
            $output .= '<li>';
            $output .= esc_html__('This plan includes ', 'truelysell');
            $output .= sprintf(_n('%d listing', '%s listings', $jobslimit, 'truelysell') . ' ', $jobslimit);
            $output .= '</li>';

            $jobduration =  $product->get_duration();
            if (!empty($jobduration)) {
                $output .= '<li>';
                $output .= esc_html__('Listings are published ', 'truelysell');
                $output .= sprintf(_n('for %s day', 'for %s days', $product->get_duration(), 'truelysell'), $product->get_duration());
                $output .= '</li>';
            }
            $output .= "</ul>";
        }

        $post_excerpt = $output . $post_excerpt;
    }
    return $post_excerpt;
}


remove_action('woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5);
remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10);
add_action('woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_add_to_cart', 10);

add_filter('woocommerce_show_page_title', 'truelysell_hide_shop_title');
function truelysell_hide_shop_title()
{
    return false;
}



remove_action('woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15);
add_action('woocommerce_after_single_product_summary', 'woocommerce_output_upsells', 15);

if (!function_exists('woocommerce_output_upsells')) {
    function woocommerce_output_upsells()
    {
        woocommerce_upsell_display(3, 3); // Display 3 products in rows of 3
    }
}

add_filter('woocommerce_output_related_products_args', 'truelysell_related_woo_per_page');

function truelysell_related_woo_per_page($args)
{
    $args = wp_parse_args(array('posts_per_page' => 3), $args);
    return $args;
}


function truelysell_woocommerce_remove_item($truelysell_html, $cart_item_key)
{
    $cart_item_key = $cart_item_key;
    $truelysell_html = sprintf('<a href="%s" class="remove" title="%s"><i class="fa fa-times" aria-hidden="true"></i></a>', esc_url(wc_get_cart_remove_url($cart_item_key)), esc_html__('Remove this item', 'truelysell'));
    return $truelysell_html;
}

add_filter('woocommerce_cart_item_remove_link', 'truelysell_woocommerce_remove_item', 10, 2);


// /**
//  * Exclude products from a particular category on the shop page
//  */
// function truelysell_remove_packages_pre_get_posts_query($q)
// {

//     $tax_query = (array) $q->get('meta_query');

//     $tax_query[] = array(
//         'taxonomy' => 'product_type',
//         'field' => 'slug',
//         'terms' => array('listing_package'), // Don't display products in the clothing category on the shop page.
//         'operator' => 'NOT IN'
//     );
//     $tax_query[] = array(
//         'taxonomy' => 'product_cat',
//         'field' => 'slug',
//         'terms' => array('truelysell-booking'), // Don't display products in the clothing category on the shop page.
//         'operator' => 'NOT IN'
//     );

//     $q->set('tax_query', $tax_query);
// }
// add_action('woocommerce_product_query', 'truelysell_remove_packages_pre_get_posts_query');

function exclude_woocommerce_widget_product_categories($widget_args)
{
    $category = get_term_by('slug', 'truelysell-booking', 'product_cat');


    $widget_args['exclude'] = array($category->term_id);

    return $widget_args;
}
add_filter('woocommerce_product_categories_widget_dropdown_args', 'exclude_woocommerce_widget_product_categories');
add_filter('woocommerce_product_categories_widget_args', 'exclude_woocommerce_widget_product_categories');

add_filter('woocommerce_products_widget_query_args', function ($query_args) {
    // Set HERE your product category slugs 
    $categories = array('truelysell-booking');

    $query_args['tax_query'] = array(array(
        'taxonomy' => 'product_cat',
        'field'    => 'slug',
        'terms'    => $categories,
        'operator' => 'NOT IN'
    ));

    return $query_args;
}, 10, 1);

remove_action('woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);



add_filter('woocommerce_add_to_cart_fragments', 'woocommerce_header_add_to_cart_fragment');
function woocommerce_header_add_to_cart_fragment($fragments)
{
    global $woocommerce;

    ob_start();
?>
    <div class="mini-cart-button"><i class="fa fa-shopping-cart"></i><span class="badge"><?php echo sprintf(_n('%d', '%d', WC()->cart->cart_contents_count, 'truelysell'), WC()->cart->cart_contents_count); ?></span></div>

<?php

    $fragments['div.mini-cart-button'] = ob_get_clean();
    return $fragments;
}

add_filter('woocommerce_add_to_cart_fragments', 'woocommerce_header_add_to_cart_summary_fragment');
function woocommerce_header_add_to_cart_summary_fragment($fragments)
{
    global $woocommerce;

    ob_start();
?>
    <p class="woocommerce-mini-cart__total total">
        <strong><?php esc_html_e('Subtotal', 'truelysell'); ?></strong>
        <?php echo WC()->cart->get_cart_subtotal(); ?>
    </p>
<?php

    $fragments['p.woocommerce-mini-cart__total'] = ob_get_clean();
    return $fragments;
}



add_filter('woocommerce_add_to_cart_fragments', 'woocommerce_header_add_to_cart_content_fragment');
function woocommerce_header_add_to_cart_content_fragment($fragments)
{

    ob_start(); ?>
    <div class="truelysell-mini-cart">
        <?php do_action('woocommerce_before_mini_cart'); ?>

        <?php if (!WC()->cart->is_empty()) : ?>

            <ul class="woocommerce-mini-cart cart_list cart-list product_list_widget">
                <?php
                do_action('woocommerce_before_mini_cart_contents');

                foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
                    $_product   = apply_filters('woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key);
                    $product_id = apply_filters('woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key);

                    if ($_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters('woocommerce_widget_cart_item_visible', true, $cart_item, $cart_item_key)) {
                        $product_name      = apply_filters('woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key);
                        $thumbnail         = apply_filters('woocommerce_cart_item_thumbnail', $_product->get_image(), $cart_item, $cart_item_key);
                        $product_price     = apply_filters('woocommerce_cart_item_price', WC()->cart->get_product_price($_product), $cart_item, $cart_item_key);
                        $product_permalink = apply_filters('woocommerce_cart_item_permalink', $_product->is_visible() ? $_product->get_permalink($cart_item) : '', $cart_item, $cart_item_key);
                ?>
                        <li class="woocommerce-mini-cart-item <?php echo esc_attr(apply_filters('woocommerce_mini_cart_item_class', 'mini_cart_item', $cart_item, $cart_item_key)); ?>">

                            <?php if (empty($product_permalink)) : ?>
                                <?php echo esc_html($thumbnail) . wp_kses_post($product_name); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 
                                ?>
                            <?php else : ?>
                                <a href="<?php echo esc_url($product_permalink); ?>">
                                    <?php echo esc_html($thumbnail); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 
                                    ?>
                                </a>
                                <a href="<?php echo esc_url($product_permalink); ?>" class="mini-cart-product-name">
                                    <span class="mini-cart-product-price"><?php echo wp_kses_post($product_name); ?></span>
                                    <?php echo apply_filters('woocommerce_widget_cart_item_quantity', '<span class="mini-cart-quantity">' . sprintf('%s &times; %s', $cart_item['quantity'], $product_price) . '</span>', $cart_item, $cart_item_key); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 
                                    ?>
                                </a>
                            <?php endif; ?>


                        </li>
                <?php
                    }
                }

                do_action('woocommerce_mini_cart_contents');
                ?>
            </ul>

            <p class="woocommerce-mini-cart__total total">
                <?php
                /**
                 * Hook: woocommerce_widget_shopping_cart_total.
                 *
                 * @hooked woocommerce_widget_shopping_cart_subtotal - 10
                 */
                do_action('woocommerce_widget_shopping_cart_total');
                ?>
            </p>

            <?php do_action('woocommerce_widget_shopping_cart_before_buttons'); ?>

            <p class="woocommerce-mini-cart__buttons buttons"><?php do_action('woocommerce_widget_shopping_cart_buttons'); ?></p>

            <?php do_action('woocommerce_widget_shopping_cart_after_buttons'); ?>

        <?php else : ?>

            <p class="woocommerce-mini-cart__empty-message"><?php esc_html_e('No products in the cart.', 'truelysell'); ?></p>

        <?php endif; ?>

        <?php do_action('woocommerce_after_mini_cart'); ?>
    </div>

    <?php $fragments['div.truelysell-mini-cart'] = ob_get_clean();
    return $fragments;
}

    ?>