i want to show cash on delivery method during checkout, only for registered users. if user is logged in show cash on delivery method otherwise not.

Please suggest in which file should i make the edit


You can use the event payment_method_is_active.
Create an observer on that and you will get the payment method instance as a parameter.
Check if the customer is logged in deactivate it if it's not.
Something like this:

public function paymentMethodIsActive($observer) {
    $method = $observer->getEvent()->getMehodInstance();
    $result = $observer->getEvent()->getResult();
    if (!$result->isAvailable) { //if the method is not available at all, do nothing
        return $this;
    if ($method->getCode() == 'cashondelivery') { //if method is cache on delivery
        //make it available only if the customer is logged in
        $result->isAvailable = Mage::getSingleton('customer/session')->isLoggedIn();

More info about the event observers can be found here

  • can this be achieved by using shopping cart price rules? – sonal Oct 9 '14 at 6:52
  • @sonal. No. The shopping cart price rules are there to change the product prices or give discounts depending on the conditions you set. It cannot enable or disable payment or shipping methods. – Marius Oct 9 '14 at 7:09
  • can u please elaborate how to accomplish the solution you have mentioned? – sonal Oct 9 '14 at 9:30
  • I just did. What more do you want? I gave you the code for the observer and a link that shows you how to add an observer. – Marius Oct 9 '14 at 10:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.