WordPress

php – Niestandardowa data filtrowania z biuletynem

  • 3 maja, 2023
  • 3 min read
php – Niestandardowa data filtrowania z biuletynem


Czy ktoś może mi pomóc zrozumieć, jaki jest prawdziwy problem z moimi kodami, które próbuję filtrować użytkownika za pomocą zakresu dat i biuletynu. już to odzyskałem za pomocą tej funkcji

$newsletter = get_user_meta($user, 'cc_newsletter', true);
    if ($newsletter == 1) {
        return 'Subscriber';
    } else {
        return '-';
    }

wyświetli się to w kolumnie tabeli wraz z ich informacjami, teraz oto mój pełny kod do filtrowania wraz z datami

public function CC_custom_filter($submit) {
    // Add field DateFrom & DateTo only in Top Section
    if ("top"==$submit) {

  $newsletter = (isset($_GET['newsletter']) && $_GET['newsletter']) ? $_GET['newsletter'] : '';
  $datefrom = (isset($_GET['DateFrom']) && $_GET['DateFrom']) ? $_GET['DateFrom'] : '';
  $dateto = (isset($_GET['DateTo']) && $_GET['DateTo']) ? $_GET['DateTo'] : '';

  $From = '<input type="text" name="DateFrom" id="DateFrom" placeholder="Date From" autocomplete="off" value="%s" />';
  $To = '<input type="text" name="DateTo" id="DateTo" placeholder="Date To" autocomplete="off" value="%s" />';
  $Newsletter="<label><input type="checkbox" name="newsletter" id="newsletter" value="1" %s>Newsletter Subscriber</label>";

  $inputForm = sprintf($From, esc_attr($datefrom));
  $inputTo = sprintf($To, esc_attr($dateto));
  $inputNewsletter = sprintf($Newsletter, checked($newsletter, '1', false));


  echo $inputForm;
  echo $inputTo;
  echo $inputNewsletter;
  ?>

         <script>
    jQuery(function($) {
        var from = $('#DateFrom'),
            to = $('#DateTo');
        $('input[name="DateFrom"], input[name="DateTo"]').datepicker({
            dateFormat: "yy-mm-dd"
        });

        from.on('change', function() {
            to.datepicker('option', 'minDate', from.val());
        });

        to.on('change', function() {
            from.datepicker('option', 'maxDate', to.val());
        });
    });
</script>
<?php
    submit_button(__( 'Filter' ), null, $submit, false);
 // Define the meta query arguments
  $meta_query_args = array();

 
  if ($datefrom && $dateto) {
      $meta_query_args[] = array(
          'key' => 'registered',
          'value' => array($datefrom . ' 00:00:00', $dateto . ' 23:59:59'),
          'compare' => 'BETWEEN',
      );
  }

 
  $user_query_args = array(
      'meta_key' => 'cc_newsletter',
      'meta_value' => $inputNewsletter,
      'meta_compare' => '=',
      'fields' => 'ID',
  );

 
  $subscribers = get_users($user_query_args);

  
  if (!empty($subscribers)) {
      $meta_query_args[] = array(
          'key' => 'cc_newsletter',
          'value' => $subscribers,
          'compare' => 'IN',
      );
  }


  if (count($meta_query_args) > 1) {
      $meta_query_args['relation'] = 'AND';
  }


  $args = array(
      'meta_query' => $meta_query_args,
      'orderby' => 'registered',
      'order' => 'DESC',
  );


  $users = get_users($args);

 // i tried to get the user_id here because that what i do when fetching the user_meta
 // based on the first code above $newsletter, but no luck
  foreach ($users as $user) {
      $newsletter_value = get_user_meta($user->ID, 'cc_newsletter', true);
      if ($newsletter_value == 1) {
       
      }
  }

} }

chcę osiągnąć to, że kiedy wybieram określone daty, powinien on również filtrować kolumnę biuletynu, ale w tej chwili nie filtruje, nadal pokazuje osobę niebędącą subskrybentem, mimo że w danych wejściowych, które już określiłem, gdy zaznaczono, wartość wynosi 1.

Warto przeczytać!  Czy istnieje sposób na całkowite wyłączenie funkcji Pingback/Trackback?

Z góry dziękuję wszystkim.


Źródło