I'm trying to disable the newsletter signup that is displayed on the "Create New Customer Account" page domainname.com/customer/account/create/ and I can not find the setting in the Admin area. Can someone please instruct me how this is done in Magento 2?
Solved! Go to Solution.
Hi @mstanigar,
Do you want to remove the option form that form only or the whole feature from the store?
If you want to disable newsletter sing up from create an account page,
By default there is only one option is available, Just Disable Magento_Newsletter Module and your signup checkbox will be removed.
If you want to Enable functionality of Newsletter, Remove checkbox link from only create an account page,
Override register.phtml file to your theme from,
vendor/magento/module-customer/view/frontend/templates/form/register.phtml
To your theme at,
app/code/frontend/{Vendorname}/{themename}/Magento_Customer/templates/form/register.phtml
Final code would be below in your override theme file,
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ // @codingStandardsIgnoreFile /** @var \Magento\Customer\Block\Form\Register $block */ ?> <?= $block->getChildHtml('form_fields_before') ?> <?php /* Extensions placeholder */ ?> <?= $block->getChildHtml('customer.form.register.extra') ?> <form class="form create account form-create-account" action="<?= $block->escapeUrl($block->getPostActionUrl()) ?>" method="post" id="form-validate" enctype="multipart/form-data" autocomplete="off"> <?= /* @noEscape */ $block->getBlockHtml('formkey'); ?> <fieldset class="fieldset create info"> <legend class="legend"><span><?= $block->escapeHtml(__('Personal Information')) ?></span></legend><br> <input type="hidden" name="success_url" value="<?= $block->escapeUrl($block->getSuccessUrl()) ?>"> <input type="hidden" name="error_url" value="<?= $block->escapeUrl($block->getErrorUrl()) ?>"> <?= $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Name')->setObject($block->getFormData())->setForceUseCustomerAttributes(true)->toHtml() ?> <?php $_dob = $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Dob') ?> <?php if ($_dob->isEnabled()): ?> <?= $_dob->setDate($block->getFormData()->getDob())->toHtml() ?> <?php endif ?> <?php $_taxvat = $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Taxvat') ?> <?php if ($_taxvat->isEnabled()): ?> <?= $_taxvat->setTaxvat($block->getFormData()->getTaxvat())->toHtml() ?> <?php endif ?> <?php $_gender = $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Gender') ?> <?php if ($_gender->isEnabled()): ?> <?= $_gender->setGender($block->getFormData()->getGender())->toHtml() ?> <?php endif ?> </fieldset> <?php if ($block->getShowAddressFields()): ?> <fieldset class="fieldset address"> <legend class="legend"><span><?= $block->escapeHtml(__('Address Information')) ?></span></legend><br> <input type="hidden" name="create_address" value="1" /> <?php $_company = $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Company') ?> <?php if ($_company->isEnabled()): ?> <?= $_company->setCompany($block->getFormData()->getCompany())->toHtml() ?> <?php endif ?> <?php $_telephone = $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Telephone') ?> <?php if ($_telephone->isEnabled()): ?> <?= $_telephone->setTelephone($block->getFormData()->getTelephone())->toHtml() ?> <?php endif ?> <?php $_fax = $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Fax') ?> <?php if ($_fax->isEnabled()): ?> <?= $_fax->setFax($block->getFormData()->getFax())->toHtml() ?> <?php endif ?> <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?> <div class="field street required"> <label for="street_1" class="label"><span><?= $block->escapeHtml(__('Street Address')) ?></span></label> <div class="control"> <input type="text" name="street[]" value="<?= $block->escapeHtmlAttr($block->getFormData()->getStreet(0)) ?>" title="<?= $block->escapeHtmlAttr(__('Street Address')) ?>" id="street_1" class="input-text <?= $block->escapeHtmlAttr($_streetValidationClass) ?>"> <div class="nested"> <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?> <?php for ($_i = 2, $_n = $this->helper('Magento\Customer\Helper\Address')->getStreetLines(); $_i <= $_n; $_i++): ?> <div class="field additional"> <label class="label" for="street_<?= /* @noEscape */ $_i ?>"> <span><?= $block->escapeHtml(__('Address')) ?></span> </label> <div class="control"> <input type="text" name="street[]" value="<?= $block->escapeHtml($block->getFormData()->getStreetLine($_i - 1)) ?>" title="<?= $block->escapeHtmlAttr(__('Street Address %1', $_i)) ?>" id="street_<?= /* @noEscape */ $_i ?>" class="input-text <?= $block->escapeHtmlAttr($_streetValidationClass) ?>"> </div> </div> <?php endfor; ?> </div> </div> </div> <div class="field required"> <label for="city" class="label"><span><?= $block->escapeHtml(__('City')) ?></span></label> <div class="control"> <input type="text" name="city" value="<?= $block->escapeHtmlAttr($block->getFormData()->getCity()) ?>" title="<?= $block->escapeHtmlAttr(__('City')) ?>" class="input-text <?= $block->escapeHtmlAttr($this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('city')) ?>" id="city"> </div> </div> <div class="field region required"> <label for="region_id" class="label"><span><?= $block->escapeHtml(__('State/Province')) ?></span></label> <div class="control"> <select id="region_id" name="region_id" title="<?= $block->escapeHtmlAttr(__('State/Province')) ?>" class="validate-select" style="display:none;"> <option value=""><?= $block->escapeHtml(__('Please select a region, state or province.')) ?></option> </select> <input type="text" id="region" name="region" value="<?= $block->escapeHtml($block->getRegion()) ?>" title="<?= $block->escapeHtmlAttr(__('State/Province')) ?>" class="input-text <?= $block->escapeHtmlAttr($this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('region')) ?>" style="display:none;"> </div> </div> <div class="field zip required"> <label for="zip" class="label"><span><?= $block->escapeHtml(__('Zip/Postal Code')) ?></span></label> <div class="control"> <input type="text" name="postcode" value="<?= $block->escapeHtmlAttr($block->getFormData()->getPostcode()) ?>" title="<?= $block->escapeHtmlAttr(__('Zip/Postal Code')) ?>" id="zip" class="input-text validate-zip-international <?= $block->escapeHtmlAttr($this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('postcode')) ?>"> </div> </div> <div class="field country required"> <label for="country" class="label"><span><?= $block->escapeHtml(__('Country')) ?></span></label> <div class="control"> <?= $block->getCountryHtmlSelect() ?> </div> </div> <?php $addressAttributes = $block->getChildBlock('customer_form_address_user_attributes');?> <?php if ($addressAttributes): ?> <?php $addressAttributes->setEntityType('customer_address'); ?> <?php $addressAttributes->setFieldIdFormat('address:%1$s')->setFieldNameFormat('address[%1$s]');?> <?php $block->restoreSessionData($addressAttributes->getMetadataForm(), 'address');?> <?= $addressAttributes->setShowContainer(false)->toHtml() ?> <?php endif;?> <input type="hidden" name="default_billing" value="1"> <input type="hidden" name="default_shipping" value="1"> </fieldset> <?php endif; ?> <fieldset class="fieldset create account" data-hasrequired="<?= $block->escapeHtmlAttr(__('* Required Fields')) ?>"> <legend class="legend"><span><?= $block->escapeHtml(__('Sign-in Information')) ?></span></legend><br> <div class="field required"> <label for="email_address" class="label"><span><?= $block->escapeHtml(__('Email')) ?></span></label> <div class="control"> <input type="email" name="email" autocomplete="email" id="email_address" value="<?= $block->escapeHtmlAttr($block->getFormData()->getEmail()) ?>" title="<?= $block->escapeHtmlAttr(__('Email')) ?>" class="input-text" data-validate="{required:true, 'validate-email':true}"> </div> </div> <div class="field password required"> <label for="password" class="label"><span><?= $block->escapeHtml(__('Password')) ?></span></label> <div class="control"> <input type="password" name="password" id="password" title="<?= $block->escapeHtmlAttr(__('Password')) ?>" class="input-text" data-password-min-length="<?= $block->escapeHtmlAttr($block->getMinimumPasswordLength()) ?>" data-password-min-character-sets="<?= $block->escapeHtmlAttr($block->getRequiredCharacterClassesNumber()) ?>" data-validate="{required:true, 'validate-customer-password':true}" autocomplete="off"> <div id="password-strength-meter-container" data-role="password-strength-meter" aria-live="polite"> <div id="password-strength-meter" class="password-strength-meter"> <?= $block->escapeHtml(__('Password Strength')) ?>: <span id="password-strength-meter-label" data-role="password-strength-meter-label"> <?= $block->escapeHtml(__('No Password')) ?> </span> </div> </div> </div> </div> <div class="field confirmation required"> <label for="password-confirmation" class="label"><span><?= $block->escapeHtml(__('Confirm Password')) ?></span></label> <div class="control"> <input type="password" name="password_confirmation" title="<?= $block->escapeHtmlAttr(__('Confirm Password')) ?>" id="password-confirmation" class="input-text" data-validate="{required:true, equalTo:'#password'}" autocomplete="off"> </div> </div> <?= $block->getChildHtml('form_additional_info') ?> </fieldset> <div class="actions-toolbar"> <div class="primary"> <button type="submit" class="action submit primary" title="<?= $block->escapeHtmlAttr(__('Create an Account')) ?>"><span><?= $block->escapeHtml(__('Create an Account')) ?></span></button> </div> <div class="secondary"> <a class="action back" href="<?= $block->escapeUrl($block->getBackUrl()) ?>"><span><?= $block->escapeHtml(__('Back')) ?></span></a> </div> </div> </form> <script> require([ 'jquery', 'mage/mage' ], function($){ var dataForm = $('#form-validate'); var ignore = <?= /* @noEscape */ $_dob->isEnabled() ? '\'input[id$="full"]\'' : 'null' ?>; dataForm.mage('validation', { <?php if ($_dob->isEnabled()): ?> errorPlacement: function(error, element) { if (element.prop('id').search('full') !== -1) { var dobElement = $(element).parents('.customer-dob'), errorClass = error.prop('class'); error.insertAfter(element.parent()); dobElement.find('.validate-custom').addClass(errorClass) .after('<div class="' + errorClass + '"></div>'); } else { error.insertAfter(element); } }, ignore: ':hidden:not(' + ignore + ')' <?php else: ?> ignore: ignore ? ':hidden:not(' + ignore + ')' : ':hidden' <?php endif ?> }).find('input:text').attr('autocomplete', 'off'); }); </script> <?php if ($block->getShowAddressFields()): ?> <script type="text/x-magento-init"> { "#country": { "regionUpdater": { "optionalRegionAllowed": <?= /* @noEscape */ $block->getConfig('general/region/display_all') ? 'true' : 'false' ?>, "regionListId": "#region_id", "regionInputId": "#region", "postcodeId": "#zip", "form": "#form-validate", "regionJson": <?= /* @noEscape */ $this->helper(\Magento\Directory\Helper\Data::class)->getRegionJson() ?>, "defaultRegion": "<?= (int) $block->getFormData()->getRegionId() ?>", "countriesWithOptionalZip": <?= /* @noEscape */ $this->helper(\Magento\Directory\Helper\Data::class)->getCountriesWithOptionalZip(true) ?> } } } </script> <?php endif; ?> <script type="text/x-magento-init"> { ".field.password": { "passwordStrengthIndicator": { "formSelector": "form.form-create-account" } } } </script>
You can Remove Newsletter module by below command,
php bin/magento module:disable --clear-static-content Magento_Newsletter php bin/magento setup:upgrade
Try to do that...
Unable to change status of modules because of the following constraints:
Cannot disable Magento_Newsletter because modules depend on it:
Magento_Store: Magento_Store->Magento_Catalog->Magento_Customer->Magento_Newsletter
Magento_AdminNotification: Magento_AdminNotification->Magento_Backend->Magento_Customer->Magento_Newsletter
Magento_Directory: Magento_Directory->Magento_Backend->Magento_Customer->Magento_Newsletter
Magento_Eav: Magento_Eav->Magento_Backend->Magento_Customer->Magento_Newsletter
Magento_Theme: Magento_Theme->Magento_Customer->Magento_Newsletter
Magento_Backend: Magento_Backend->Magento_Customer->Magento_Newsletter
Magento_Customer: Magento_Customer->Magento_Newsletter
Magento_Indexer: Magento_Indexer->Magento_Backend->Magento_Customer->Magento_Newsletter
Magento_Cms: Magento_Cms->Magento_Theme->Magento_Customer->Magento_Newsletter
etc etc etc
add the -f flag to force it.
@MaartenVt wrote:Try to do that...
Unable to change status of modules because of the following constraints:
Cannot disable Magento_Newsletter because modules depend on it:
Magento_Store: Magento_Store->Magento_Catalog->Magento_Customer->Magento_Newsletter
Magento_AdminNotification: Magento_AdminNotification->Magento_Backend->Magento_Customer->Magento_Newsletter
Magento_Directory: Magento_Directory->Magento_Backend->Magento_Customer->Magento_Newsletter
Magento_Eav: Magento_Eav->Magento_Backend->Magento_Customer->Magento_Newsletter
Magento_Theme: Magento_Theme->Magento_Customer->Magento_Newsletter
Magento_Backend: Magento_Backend->Magento_Customer->Magento_Newsletter
Magento_Customer: Magento_Customer->Magento_Newsletter
Magento_Indexer: Magento_Indexer->Magento_Backend->Magento_Customer->Magento_Newsletter
Magento_Cms: Magento_Cms->Magento_Theme->Magento_Customer->Magento_Newsletter
etc etc etc
For anyone else who arrives here needing to do this:
The right solution is to use 'disable module output' - in M1 this used to be available from the admin area but in M2 you need to edit app/edit/config.php:
See https://devdocs.magento.com/guides/v2.3/config-guide/config/disable-module-output.html
Use that but note that the 'base' in the example is the website code - you'll need to add it for every website code that you want to disable the module on. After adding it run 'bin/magento app:config:import'