skip to Main Content

I am trying to apply some css in my php for a test to see how to hide a button in my php file. It’s not happening at the moment and I am not sure why it is not removing the button.

HTML:

<a href="https://test,com" class="button" name="hpy_cs_continue" value="Continue Shopping">Continue Shopping</a>

PHP

verify_all_products_in_cart() {
    
    $shopping_cart_button = "<style type='text/css'>
                                a[name='hpy_cs_continue']{ 
                                display:none !important;
                                }
                                </style>";
  
    return $shopping_cart_button;
  
}

UPDATE

The above code is a test code to try and fix the main code below:

add_action( 'woocommerce_after_cart', 'verify_all_products_in_cart' );
    
function verify_all_products_in_cart() {
    
    $all_products = false;
    $all_products_array  = wc_get_products( array( 'return' => 'ids', 'limit' => -1 ) );
    $products_in_cart_array = array();
    
  // Loop over $cart items
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {    
    $products_in_cart_array &= in_array($cart_item['product_id']);
}
    if($all_products_array == $products_in_cart_array){
        $all_products = true;
    } else{
        $all_products = false;
    }
                                  
  if ($all_products = true){
      $shopping_cart_button = '<style>a[name="hpy_cs_continue"]{ display:none !important;}</style>';
  } else{
      $shopping_cart_button = '<style>a[name="hpy_cs_continue"]{ display:block !important;}</style>';
  }
   
    return $shopping_cart_button;
  
}

2

Answers


  1. Simply apply the CSS directly to the element like that,

    <a href="https://test,com" style="display: none;" class="button" name="hpy_cs_continue" value="Continue Shopping">Continue Shopping</a>
    
    Login or Signup to reply.
  2. In your verify_all_products_in_cart function, you have several isues:

    in_array needs 2 parameters, you’re only sending one

    $products_in_cart_array &= in_array($cart_item['product_id']);
    

    this is doing an assignment = not a check == / ===

    if ($all_products = true){  
    

    $all_products is overused being set in 3 places

    $shopping_cart_button is a poorly named and unessicary variable with a lot of duplicated code


    You could re-write this function to something like the below which should work for your needs (assuming wc_get_products returns an array of ids, if not it may take a bit of modifying):

    add_action( 'woocommerce_after_cart', 'verify_all_products_in_cart' );
    
    function verify_all_products_in_cart() {
        $display = 'block';
        $all_products_array  = wc_get_products(['return' => 'ids', 'limit' => -1]); // Im assuming this returns an array of ids for all products..
        $products_in_cart_array = [];
        foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
            $products_in_cart_array[]=$cart_item['product_id'];
        }
        if(count($all_products_array) !== count($products_in_cart_array)){
            $display = 'none';
        }
        return "<style>a[name='.'hpy_cs_continue'']{ display:$display !important;}</style>";
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search