woocommerce_email_attachments hook with empty $order argument in Woocommerce









up vote
1
down vote

favorite












The person building a WP site for me is stuck for some time now with this problem. He needs to attach some custom PDF files into the order confirmation mail. He uses woocommerce_emails_attach_downloadables function to do that. For some reason that function is getting called with the $order parameter being empty.



Here is the code he uses :



add_filter( 'woocommerce_email_attachments', 'attach_order_notice', 10, 3 );
function attach_order_notice ( $attachments, $email_id, $order )


//

// Only for "New Order" email notification (for admin)
if( $email_id == 'customer_on_hold_order' )

$pdf_options = array(
// "source_type" => 'html',
// "source" => '<html>hello</html>',
"source_type" => 'url',
"source" => 'http://tag4u.devurl.co.il/checkout/order-received/757/?key=wc_order_5bce0e5ba39b8',
"action" => 'save',
"save_directory" => get_template_directory() .'/pdfs',
"file_name" => 'print-pdf'. json_encode($order) .'.pdf');


// phptopdf($pdf_options);




$attachments = get_template_directory() . '/pdfs/print-pdf.pdf';

return $attachments;



So my questions are:

What are those cases ?

What can cause $order to be passed as empty ?










share|improve this question



























    up vote
    1
    down vote

    favorite












    The person building a WP site for me is stuck for some time now with this problem. He needs to attach some custom PDF files into the order confirmation mail. He uses woocommerce_emails_attach_downloadables function to do that. For some reason that function is getting called with the $order parameter being empty.



    Here is the code he uses :



    add_filter( 'woocommerce_email_attachments', 'attach_order_notice', 10, 3 );
    function attach_order_notice ( $attachments, $email_id, $order )


    //

    // Only for "New Order" email notification (for admin)
    if( $email_id == 'customer_on_hold_order' )

    $pdf_options = array(
    // "source_type" => 'html',
    // "source" => '<html>hello</html>',
    "source_type" => 'url',
    "source" => 'http://tag4u.devurl.co.il/checkout/order-received/757/?key=wc_order_5bce0e5ba39b8',
    "action" => 'save',
    "save_directory" => get_template_directory() .'/pdfs',
    "file_name" => 'print-pdf'. json_encode($order) .'.pdf');


    // phptopdf($pdf_options);




    $attachments = get_template_directory() . '/pdfs/print-pdf.pdf';

    return $attachments;



    So my questions are:

    What are those cases ?

    What can cause $order to be passed as empty ?










    share|improve this question

























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      The person building a WP site for me is stuck for some time now with this problem. He needs to attach some custom PDF files into the order confirmation mail. He uses woocommerce_emails_attach_downloadables function to do that. For some reason that function is getting called with the $order parameter being empty.



      Here is the code he uses :



      add_filter( 'woocommerce_email_attachments', 'attach_order_notice', 10, 3 );
      function attach_order_notice ( $attachments, $email_id, $order )


      //

      // Only for "New Order" email notification (for admin)
      if( $email_id == 'customer_on_hold_order' )

      $pdf_options = array(
      // "source_type" => 'html',
      // "source" => '<html>hello</html>',
      "source_type" => 'url',
      "source" => 'http://tag4u.devurl.co.il/checkout/order-received/757/?key=wc_order_5bce0e5ba39b8',
      "action" => 'save',
      "save_directory" => get_template_directory() .'/pdfs',
      "file_name" => 'print-pdf'. json_encode($order) .'.pdf');


      // phptopdf($pdf_options);




      $attachments = get_template_directory() . '/pdfs/print-pdf.pdf';

      return $attachments;



      So my questions are:

      What are those cases ?

      What can cause $order to be passed as empty ?










      share|improve this question















      The person building a WP site for me is stuck for some time now with this problem. He needs to attach some custom PDF files into the order confirmation mail. He uses woocommerce_emails_attach_downloadables function to do that. For some reason that function is getting called with the $order parameter being empty.



      Here is the code he uses :



      add_filter( 'woocommerce_email_attachments', 'attach_order_notice', 10, 3 );
      function attach_order_notice ( $attachments, $email_id, $order )


      //

      // Only for "New Order" email notification (for admin)
      if( $email_id == 'customer_on_hold_order' )

      $pdf_options = array(
      // "source_type" => 'html',
      // "source" => '<html>hello</html>',
      "source_type" => 'url',
      "source" => 'http://tag4u.devurl.co.il/checkout/order-received/757/?key=wc_order_5bce0e5ba39b8',
      "action" => 'save',
      "save_directory" => get_template_directory() .'/pdfs',
      "file_name" => 'print-pdf'. json_encode($order) .'.pdf');


      // phptopdf($pdf_options);




      $attachments = get_template_directory() . '/pdfs/print-pdf.pdf';

      return $attachments;



      So my questions are:

      What are those cases ?

      What can cause $order to be passed as empty ?







      php wordpress object woocommerce hook-woocommerce






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 12 at 22:34









      LoicTheAztec

      82.8k125993




      82.8k125993










      asked Nov 11 at 20:34









      Louis Shraga

      1891215




      1891215






















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          Your developer has been using maybe this woocommerce official snippet (That is outdated as it is 3 years old) and it uses woocommerce_email_attachments filter hook.



          This filter hook is defined:



          • one time (1) in WC_Email class (with the $order argument)

          • three times (3) in WC_emails Class (without the $order argument)


          So the WC_Order Object $order is only defined in WC_Email class as third argument.




          That means that this outdated official code need to be tweaked as follow:



          add_filter( 'woocommerce_email_attachments', 'woocommerce_emails_attach_downloadables', 10, 3 );
          function woocommerce_emails_attach_downloadables( $attachments, $email_id, $order ) ! isset( $email_id ) )
          return $attachments;


          // ===> Your custom code goes Here <===

          return $attachments;



          This should work avoiding problems.




          So as you are asking, this hook is also used on the following specific product notifications with really different hook arguments:



          • On "Low stock" notification (with 'low_stock' and $product as 2nd & 3rd arguments)

          • On "No stock" notification (with 'no_stock' and $product as 2nd & 3rd arguments)

          • On "Backorder" notification (with 'backorder' and $args as 2nd & 3rd arguments)

          So here the 2nd argument is the stock status $stock_status and the 3rd argument is the WC_Product object $product (or an array $args).




          Then In those 3 notifications, the $order object doesn't exist as it can be a WC_Product Object, an array, an empty array, or null.






          share|improve this answer






















          • thanks ! I think the answer is very close to what you said. I updated the original question with the real code. Could you see what is wrong there ? I see that he uses a different filter than the one mentioned
            – Louis Shraga
            Nov 12 at 13:16










          • Just to better understand the answer : the same hook is called a number of times for the same order ? Some of the times with a set A of params and the other times with a somewhat different set of params ? And in the hook the code needs to "understand" which type of a call this one is ? Right ?
            – Louis Shraga
            Nov 12 at 22:25






          • 1




            @LouisShraga The hook is called on other notifications as product Low stock, No stock, Backorder… And it's called on all Order notifications, if you don't restrict it to a specific $email_id. In your code it's restricted to $email_id = 'customer_on_hold_order' so it's used on Customer on Hold Order email notification… If you like/want you could please also upvote this answer. Thank you anyway.
            – LoicTheAztec
            Nov 12 at 22:31











          • Thanks, do you know and/or can point me please to the documentation (i just cant find it) where it says if $order is set for a call in case of customer_on_hold emailId
            – Louis Shraga
            Nov 13 at 6:51











          • @LouisShraga There is no a specific documentation… When an order is set ta a specific order status, it will trigger the related email notification, if it's set and defined… You can explore the source code of each woocommerce classes starting with WC_Email For each class you have the order status transitions that is triggering an email.
            – LoicTheAztec
            Nov 13 at 14:07










          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53252974%2fwoocommerce-email-attachments-hook-with-empty-order-argument-in-woocommerce%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          1
          down vote



          accepted










          Your developer has been using maybe this woocommerce official snippet (That is outdated as it is 3 years old) and it uses woocommerce_email_attachments filter hook.



          This filter hook is defined:



          • one time (1) in WC_Email class (with the $order argument)

          • three times (3) in WC_emails Class (without the $order argument)


          So the WC_Order Object $order is only defined in WC_Email class as third argument.




          That means that this outdated official code need to be tweaked as follow:



          add_filter( 'woocommerce_email_attachments', 'woocommerce_emails_attach_downloadables', 10, 3 );
          function woocommerce_emails_attach_downloadables( $attachments, $email_id, $order ) ! isset( $email_id ) )
          return $attachments;


          // ===> Your custom code goes Here <===

          return $attachments;



          This should work avoiding problems.




          So as you are asking, this hook is also used on the following specific product notifications with really different hook arguments:



          • On "Low stock" notification (with 'low_stock' and $product as 2nd & 3rd arguments)

          • On "No stock" notification (with 'no_stock' and $product as 2nd & 3rd arguments)

          • On "Backorder" notification (with 'backorder' and $args as 2nd & 3rd arguments)

          So here the 2nd argument is the stock status $stock_status and the 3rd argument is the WC_Product object $product (or an array $args).




          Then In those 3 notifications, the $order object doesn't exist as it can be a WC_Product Object, an array, an empty array, or null.






          share|improve this answer






















          • thanks ! I think the answer is very close to what you said. I updated the original question with the real code. Could you see what is wrong there ? I see that he uses a different filter than the one mentioned
            – Louis Shraga
            Nov 12 at 13:16










          • Just to better understand the answer : the same hook is called a number of times for the same order ? Some of the times with a set A of params and the other times with a somewhat different set of params ? And in the hook the code needs to "understand" which type of a call this one is ? Right ?
            – Louis Shraga
            Nov 12 at 22:25






          • 1




            @LouisShraga The hook is called on other notifications as product Low stock, No stock, Backorder… And it's called on all Order notifications, if you don't restrict it to a specific $email_id. In your code it's restricted to $email_id = 'customer_on_hold_order' so it's used on Customer on Hold Order email notification… If you like/want you could please also upvote this answer. Thank you anyway.
            – LoicTheAztec
            Nov 12 at 22:31











          • Thanks, do you know and/or can point me please to the documentation (i just cant find it) where it says if $order is set for a call in case of customer_on_hold emailId
            – Louis Shraga
            Nov 13 at 6:51











          • @LouisShraga There is no a specific documentation… When an order is set ta a specific order status, it will trigger the related email notification, if it's set and defined… You can explore the source code of each woocommerce classes starting with WC_Email For each class you have the order status transitions that is triggering an email.
            – LoicTheAztec
            Nov 13 at 14:07














          up vote
          1
          down vote



          accepted










          Your developer has been using maybe this woocommerce official snippet (That is outdated as it is 3 years old) and it uses woocommerce_email_attachments filter hook.



          This filter hook is defined:



          • one time (1) in WC_Email class (with the $order argument)

          • three times (3) in WC_emails Class (without the $order argument)


          So the WC_Order Object $order is only defined in WC_Email class as third argument.




          That means that this outdated official code need to be tweaked as follow:



          add_filter( 'woocommerce_email_attachments', 'woocommerce_emails_attach_downloadables', 10, 3 );
          function woocommerce_emails_attach_downloadables( $attachments, $email_id, $order ) ! isset( $email_id ) )
          return $attachments;


          // ===> Your custom code goes Here <===

          return $attachments;



          This should work avoiding problems.




          So as you are asking, this hook is also used on the following specific product notifications with really different hook arguments:



          • On "Low stock" notification (with 'low_stock' and $product as 2nd & 3rd arguments)

          • On "No stock" notification (with 'no_stock' and $product as 2nd & 3rd arguments)

          • On "Backorder" notification (with 'backorder' and $args as 2nd & 3rd arguments)

          So here the 2nd argument is the stock status $stock_status and the 3rd argument is the WC_Product object $product (or an array $args).




          Then In those 3 notifications, the $order object doesn't exist as it can be a WC_Product Object, an array, an empty array, or null.






          share|improve this answer






















          • thanks ! I think the answer is very close to what you said. I updated the original question with the real code. Could you see what is wrong there ? I see that he uses a different filter than the one mentioned
            – Louis Shraga
            Nov 12 at 13:16










          • Just to better understand the answer : the same hook is called a number of times for the same order ? Some of the times with a set A of params and the other times with a somewhat different set of params ? And in the hook the code needs to "understand" which type of a call this one is ? Right ?
            – Louis Shraga
            Nov 12 at 22:25






          • 1




            @LouisShraga The hook is called on other notifications as product Low stock, No stock, Backorder… And it's called on all Order notifications, if you don't restrict it to a specific $email_id. In your code it's restricted to $email_id = 'customer_on_hold_order' so it's used on Customer on Hold Order email notification… If you like/want you could please also upvote this answer. Thank you anyway.
            – LoicTheAztec
            Nov 12 at 22:31











          • Thanks, do you know and/or can point me please to the documentation (i just cant find it) where it says if $order is set for a call in case of customer_on_hold emailId
            – Louis Shraga
            Nov 13 at 6:51











          • @LouisShraga There is no a specific documentation… When an order is set ta a specific order status, it will trigger the related email notification, if it's set and defined… You can explore the source code of each woocommerce classes starting with WC_Email For each class you have the order status transitions that is triggering an email.
            – LoicTheAztec
            Nov 13 at 14:07












          up vote
          1
          down vote



          accepted







          up vote
          1
          down vote



          accepted






          Your developer has been using maybe this woocommerce official snippet (That is outdated as it is 3 years old) and it uses woocommerce_email_attachments filter hook.



          This filter hook is defined:



          • one time (1) in WC_Email class (with the $order argument)

          • three times (3) in WC_emails Class (without the $order argument)


          So the WC_Order Object $order is only defined in WC_Email class as third argument.




          That means that this outdated official code need to be tweaked as follow:



          add_filter( 'woocommerce_email_attachments', 'woocommerce_emails_attach_downloadables', 10, 3 );
          function woocommerce_emails_attach_downloadables( $attachments, $email_id, $order ) ! isset( $email_id ) )
          return $attachments;


          // ===> Your custom code goes Here <===

          return $attachments;



          This should work avoiding problems.




          So as you are asking, this hook is also used on the following specific product notifications with really different hook arguments:



          • On "Low stock" notification (with 'low_stock' and $product as 2nd & 3rd arguments)

          • On "No stock" notification (with 'no_stock' and $product as 2nd & 3rd arguments)

          • On "Backorder" notification (with 'backorder' and $args as 2nd & 3rd arguments)

          So here the 2nd argument is the stock status $stock_status and the 3rd argument is the WC_Product object $product (or an array $args).




          Then In those 3 notifications, the $order object doesn't exist as it can be a WC_Product Object, an array, an empty array, or null.






          share|improve this answer














          Your developer has been using maybe this woocommerce official snippet (That is outdated as it is 3 years old) and it uses woocommerce_email_attachments filter hook.



          This filter hook is defined:



          • one time (1) in WC_Email class (with the $order argument)

          • three times (3) in WC_emails Class (without the $order argument)


          So the WC_Order Object $order is only defined in WC_Email class as third argument.




          That means that this outdated official code need to be tweaked as follow:



          add_filter( 'woocommerce_email_attachments', 'woocommerce_emails_attach_downloadables', 10, 3 );
          function woocommerce_emails_attach_downloadables( $attachments, $email_id, $order ) ! isset( $email_id ) )
          return $attachments;


          // ===> Your custom code goes Here <===

          return $attachments;



          This should work avoiding problems.




          So as you are asking, this hook is also used on the following specific product notifications with really different hook arguments:



          • On "Low stock" notification (with 'low_stock' and $product as 2nd & 3rd arguments)

          • On "No stock" notification (with 'no_stock' and $product as 2nd & 3rd arguments)

          • On "Backorder" notification (with 'backorder' and $args as 2nd & 3rd arguments)

          So here the 2nd argument is the stock status $stock_status and the 3rd argument is the WC_Product object $product (or an array $args).




          Then In those 3 notifications, the $order object doesn't exist as it can be a WC_Product Object, an array, an empty array, or null.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Nov 11 at 22:41

























          answered Nov 11 at 22:26









          LoicTheAztec

          82.8k125993




          82.8k125993











          • thanks ! I think the answer is very close to what you said. I updated the original question with the real code. Could you see what is wrong there ? I see that he uses a different filter than the one mentioned
            – Louis Shraga
            Nov 12 at 13:16










          • Just to better understand the answer : the same hook is called a number of times for the same order ? Some of the times with a set A of params and the other times with a somewhat different set of params ? And in the hook the code needs to "understand" which type of a call this one is ? Right ?
            – Louis Shraga
            Nov 12 at 22:25






          • 1




            @LouisShraga The hook is called on other notifications as product Low stock, No stock, Backorder… And it's called on all Order notifications, if you don't restrict it to a specific $email_id. In your code it's restricted to $email_id = 'customer_on_hold_order' so it's used on Customer on Hold Order email notification… If you like/want you could please also upvote this answer. Thank you anyway.
            – LoicTheAztec
            Nov 12 at 22:31











          • Thanks, do you know and/or can point me please to the documentation (i just cant find it) where it says if $order is set for a call in case of customer_on_hold emailId
            – Louis Shraga
            Nov 13 at 6:51











          • @LouisShraga There is no a specific documentation… When an order is set ta a specific order status, it will trigger the related email notification, if it's set and defined… You can explore the source code of each woocommerce classes starting with WC_Email For each class you have the order status transitions that is triggering an email.
            – LoicTheAztec
            Nov 13 at 14:07
















          • thanks ! I think the answer is very close to what you said. I updated the original question with the real code. Could you see what is wrong there ? I see that he uses a different filter than the one mentioned
            – Louis Shraga
            Nov 12 at 13:16










          • Just to better understand the answer : the same hook is called a number of times for the same order ? Some of the times with a set A of params and the other times with a somewhat different set of params ? And in the hook the code needs to "understand" which type of a call this one is ? Right ?
            – Louis Shraga
            Nov 12 at 22:25






          • 1




            @LouisShraga The hook is called on other notifications as product Low stock, No stock, Backorder… And it's called on all Order notifications, if you don't restrict it to a specific $email_id. In your code it's restricted to $email_id = 'customer_on_hold_order' so it's used on Customer on Hold Order email notification… If you like/want you could please also upvote this answer. Thank you anyway.
            – LoicTheAztec
            Nov 12 at 22:31











          • Thanks, do you know and/or can point me please to the documentation (i just cant find it) where it says if $order is set for a call in case of customer_on_hold emailId
            – Louis Shraga
            Nov 13 at 6:51











          • @LouisShraga There is no a specific documentation… When an order is set ta a specific order status, it will trigger the related email notification, if it's set and defined… You can explore the source code of each woocommerce classes starting with WC_Email For each class you have the order status transitions that is triggering an email.
            – LoicTheAztec
            Nov 13 at 14:07















          thanks ! I think the answer is very close to what you said. I updated the original question with the real code. Could you see what is wrong there ? I see that he uses a different filter than the one mentioned
          – Louis Shraga
          Nov 12 at 13:16




          thanks ! I think the answer is very close to what you said. I updated the original question with the real code. Could you see what is wrong there ? I see that he uses a different filter than the one mentioned
          – Louis Shraga
          Nov 12 at 13:16












          Just to better understand the answer : the same hook is called a number of times for the same order ? Some of the times with a set A of params and the other times with a somewhat different set of params ? And in the hook the code needs to "understand" which type of a call this one is ? Right ?
          – Louis Shraga
          Nov 12 at 22:25




          Just to better understand the answer : the same hook is called a number of times for the same order ? Some of the times with a set A of params and the other times with a somewhat different set of params ? And in the hook the code needs to "understand" which type of a call this one is ? Right ?
          – Louis Shraga
          Nov 12 at 22:25




          1




          1




          @LouisShraga The hook is called on other notifications as product Low stock, No stock, Backorder… And it's called on all Order notifications, if you don't restrict it to a specific $email_id. In your code it's restricted to $email_id = 'customer_on_hold_order' so it's used on Customer on Hold Order email notification… If you like/want you could please also upvote this answer. Thank you anyway.
          – LoicTheAztec
          Nov 12 at 22:31





          @LouisShraga The hook is called on other notifications as product Low stock, No stock, Backorder… And it's called on all Order notifications, if you don't restrict it to a specific $email_id. In your code it's restricted to $email_id = 'customer_on_hold_order' so it's used on Customer on Hold Order email notification… If you like/want you could please also upvote this answer. Thank you anyway.
          – LoicTheAztec
          Nov 12 at 22:31













          Thanks, do you know and/or can point me please to the documentation (i just cant find it) where it says if $order is set for a call in case of customer_on_hold emailId
          – Louis Shraga
          Nov 13 at 6:51





          Thanks, do you know and/or can point me please to the documentation (i just cant find it) where it says if $order is set for a call in case of customer_on_hold emailId
          – Louis Shraga
          Nov 13 at 6:51













          @LouisShraga There is no a specific documentation… When an order is set ta a specific order status, it will trigger the related email notification, if it's set and defined… You can explore the source code of each woocommerce classes starting with WC_Email For each class you have the order status transitions that is triggering an email.
          – LoicTheAztec
          Nov 13 at 14:07




          @LouisShraga There is no a specific documentation… When an order is set ta a specific order status, it will trigger the related email notification, if it's set and defined… You can explore the source code of each woocommerce classes starting with WC_Email For each class you have the order status transitions that is triggering an email.
          – LoicTheAztec
          Nov 13 at 14:07

















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53252974%2fwoocommerce-email-attachments-hook-with-empty-order-argument-in-woocommerce%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Top Tejano songwriter Luis Silva dead of heart attack at 64

          ReactJS Fetched API data displays live - need Data displayed static

          政党