• Resolved LukeDouglas

    (@lukedouglas)


    I have disabled all experiments. I have rolled back several versions to v3.6.7 and a PayPal script is not displaying properly. I’ve rolled PHP from 8.1 to 8.0 to 7.4 to 7.3 and I get the same problem.

    Here is the live site page with Joomla which works fine.
    https://aztecrealestate.net/en-us/income-tax-services

    The page I need help with: https://aztecrealestate.online/paypal-script/

    It has nothing to do with Elementor. I created a page with normal editor, not within Elementor and the script didn’t work. I even disabled Elementor and it still didn’t work. The script works perfectly on a Joomla website page.

    • This topic was modified 2 years, 1 month ago by LukeDouglas.

    The page I need help with: [log in to see the link]

Viewing 5 replies - 1 through 5 (of 5 total)
  • There is a syntax error in the script you have pasted. How did you include this script in WordPress? Via the HTML block in the block editor? Can you post the code you used for this here?

    Thread Starter LukeDouglas

    (@lukedouglas)

    I ran it on JS Bin, https://jsbin.com/?html,output, and it worked. Not sure where the syntax error is.

    <div id="smart-button-container">
        <div style="text-align: center"><label for="description"> </label><input type="text" name="descriptionInput" id="description" maxlength="127" value=""></div>
          <p id="descriptionError" style="visibility: hidden; color:red; text-align: center;">Please enter a description</p>
        <div style="text-align: center"><label for="amount"> </label><input name="amountInput" type="number" id="amount" value="" ><span> USD</span></div>
          <p id="priceLabelError" style="visibility: hidden; color:red; text-align: center;">Please enter a price</p>
        <div id="invoiceidDiv" style="text-align: center; display: none;"><label for="invoiceid"> </label><input name="invoiceid" maxlength="127" type="text" id="invoiceid" value="" ></div>
          <p id="invoiceidError" style="visibility: hidden; color:red; text-align: center;">Please enter an Invoice ID</p>
        <div style="text-align: center; margin-top: 0.625rem;" id="paypal-button-container"></div>
      </div>
      <script src="https://www.paypal.com/sdk/js?client-id=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&enable-funding=venmo&currency=USD" data-sdk-integration-source="button-factory"></script>
      <script>
      function initPayPalButton() {
        var description = document.querySelector('#smart-button-container #description');
        var amount = document.querySelector('#smart-button-container #amount');
        var descriptionError = document.querySelector('#smart-button-container #descriptionError');
        var priceError = document.querySelector('#smart-button-container #priceLabelError');
        var invoiceid = document.querySelector('#smart-button-container #invoiceid');
        var invoiceidError = document.querySelector('#smart-button-container #invoiceidError');
        var invoiceidDiv = document.querySelector('#smart-button-container #invoiceidDiv');
    
        var elArr = [description, amount];
    
        if (invoiceidDiv.firstChild.innerHTML.length > 1) {
          invoiceidDiv.style.display = "block";
        }
    
        var purchase_units = [];
        purchase_units[0] = {};
        purchase_units[0].amount = {};
    
        function validate(event) {
          return event.value.length > 0;
        }
    
        paypal.Buttons({
          style: {
            color: 'gold',
            shape: 'rect',
            label: 'paypal',
            layout: 'vertical',
            
          },
    
          onInit: function (data, actions) {
            actions.disable();
    
            if(invoiceidDiv.style.display === "block") {
              elArr.push(invoiceid);
            }
    
            elArr.forEach(function (item) {
              item.addEventListener('keyup', function (event) {
                var result = elArr.every(validate);
                if (result) {
                  actions.enable();
                } else {
                  actions.disable();
                }
              });
            });
          },
    
          onClick: function () {
            if (description.value.length < 1) {
              descriptionError.style.visibility = "visible";
            } else {
              descriptionError.style.visibility = "hidden";
            }
    
            if (amount.value.length < 1) {
              priceError.style.visibility = "visible";
            } else {
              priceError.style.visibility = "hidden";
            }
    
            if (invoiceid.value.length < 1 && invoiceidDiv.style.display === "block") {
              invoiceidError.style.visibility = "visible";
            } else {
              invoiceidError.style.visibility = "hidden";
            }
    
            purchase_units[0].description = description.value;
            purchase_units[0].amount.value = amount.value;
    
            if(invoiceid.value !== '') {
              purchase_units[0].invoice_id = invoiceid.value;
            }
          },
    
          createOrder: function (data, actions) {
            return actions.order.create({
              purchase_units: purchase_units,
            });
          },
    
          onApprove: function (data, actions) {
            return actions.order.capture().then(function (orderData) {
    
              // Full available details
              console.log('Capture result', orderData, JSON.stringify(orderData, null, 2));
    
              // Show a success message within this page, e.g.
              const element = document.getElementById('paypal-button-container');
              element.innerHTML = '';
              element.innerHTML = '<h3>Thank you for your payment!</h3>';
    
              // Or go to another URL:  actions.redirect('thank_you.html');
              
            });
          },
    
          onError: function (err) {
            console.log(err);
          }
        }).render('#paypal-button-container');
      }
      initPayPalButton();
      </script>
    Moderator bcworkz

    (@bcworkz)

    This line on your page:
    if (invoiceid.value.length < 1 &_#038;&_#038; invoiceidDiv.style.display === "block") {

    I added underscores to the above HTML entities so they don’t render as &&. You cannot have HTML entities in JavaScript, they need to be the actual && chars.

    I can reproduce the problem. I have pasted the above source code (which is syntactically absolutely correct) into an HTML block in the Block Editor. As soon as I save it, the syntax error occurs in the frontend – but not in the editor.

    This is a bug that seems to be in the core for years. Here are 2 tickets I found about it:
    https://core.trac.www.ads-software.com/ticket/50461
    https://core.trac.www.ads-software.com/ticket/49480

    I haven’t seen a solution for this yet, so I would recommend the following alternative way:
    Use the plugin https://www.ads-software.com/plugins/code-snippets/ to capture the code as shortcode. Then paste the shortcode in the block editor where you want it to appear.

    Thread Starter LukeDouglas

    (@lukedouglas)

    @threadi,

    I installed the code-snippets plugin and created a snippet for the PayPal script. Worked great! In fact, this is a better solution as I was going to need this script on two pages. Now all I have to do is insert the short code! GREAT!

    Thanks for the tip!

Viewing 5 replies - 1 through 5 (of 5 total)
  • The topic ‘PayPal script not executed properly’ is closed to new replies.