2015-05-22 4 views
5

Quindi ho la funzione qui sotto per ottenere i miei post, ma voglio che l'utente vada direttamente su una pagina dove i post hanno data "oggi" questo non è un data di pubblicazione dell'evento ma una data per quando l'evento sta accadendo, come se avessi eventi che hanno il campo man_date2015-4-12 e oggi è 2015-4-12 vedrò direttamente la pagina in cui quell'evento è senza prendere quegli eventi in prima pagina.Porta l'utente direttamente alla pagina in cui la data dell'evento corrisponde alla data corrente (paginazione)

function get_table(){ 
       global $wpdb; 
       $c_cid = $_REQUEST['cat']; 
       if(isset($_REQUEST["page"])){ 
        $page_number = filter_var($_REQUEST["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH); //filter number 
        if(!is_numeric($page_number)){die('Invalid page number!');} //incase of invalid page number 
       }else{ 
        $page_number = 1; //if there's no page number, set it to 1 
       } 
       $item_per_page = 20; 
       //get total number of records from database for pagination 
       $get_total_row = $wpdb->get_results("SELECT wp_posts.* FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) WHERE wp_term_taxonomy.taxonomy = 'tipo_manifestazione' AND wp_term_taxonomy.term_id = $c_cid AND wp_posts.post_status = 'publish' AND (wp_posts.vip = 'NULL' OR wp_posts.vip IS NULL) AND wp_posts.post_type = 'manifestazione' GROUP BY wp_posts.ID ORDER BY wp_posts.ID DESC"); 
       $get_total_rows = count($get_total_row); 
       //break records into pages 
       $total_pages = ceil($get_total_rows/$item_per_page); 

       //get starting position to fetch the records 
       $page_position = (($page_number-1) * $item_per_page); 

       ?> 
      <section class="table_container"> 
              <div class="controls_container"> 
               <div class="control"> 
               <select id="months" name="months"> 
                <option value="" selected>Seleziona Mese</option> 
                <option value="01">Gennaio</option> 
                <option value="02">Febbraio</option> 
                <option value="03">Marzo</option> 
                <option value="04">Aprile</option> 
                <option value="05">Maggio</option> 
                <option value="06">Giugno</option> 
                <option value="07">Luglio</option> 
                <option value="08">Agosto</option> 
                <option value="09">Settembre</option> 
                <option value="10">Ottobre</option> 
                <option value="11">Novembre</option> 
                <option value="12">Dicembre</option> 
               </select> 
               </div> 
               <div class="control"> 
                <input type="text" name="location_search" id="location_search" placeholder="Luogo..."/> 
               </div> 
               <div class="control"> 
                <div class="loading" style="display:none;"></div> 
               </div> 
               <div class="control right"> 
               <?php echo paginate_function($item_per_page, $page_number, $get_total_rows, $total_pages); ?> 
              </div> 
              </div> 
              <header class="table_header"> 
               <div class="sec_th first"> 
               <span class="sec_th_t">Voto</span> 
               </div> 
               <div class="sec_th second"> 
               <span class="sec_th_t">Data</span> 
               </div> 
               <div class="sec_th third"> 
               <span class="sec_th_t">Manifestazione</span> 
               </div> 
               <div class="sec_th fourth"> 
               <span class="sec_th_t">Località</span> 
               </div> 
               <div class="sec_th fifth"> 
               <span class="sec_th_t">Percorso Lungo</span> 
               </div> 
               <div class="sec_th sixth"> 
               <span class="sec_th_t">Info</span> 
               </div> 
               </header> 
               <div id="rows_container"> 
               <?php 
                $query = "SELECT wp_posts.* FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) WHERE wp_term_taxonomy.taxonomy = 'tipo_manifestazione' AND wp_term_taxonomy.term_id = $c_cid AND wp_posts.post_status = 'publish' AND (wp_posts.vip = 'NULL' OR wp_posts.vip IS NULL) AND wp_posts.post_type = 'manifestazione' GROUP BY wp_posts.ID ORDER BY wp_posts.ID DESC LIMIT $page_position, $item_per_page"; 

                 $posts = $wpdb->get_results($query); 
                 foreach($posts as $post){ 
                 $permalink = get_permalink($post->ID); 
                 $locations = $wpdb->get_results("SELECT * FROM wp_locations WHERE post_id = $post->ID"); 
                 $l = $locations[0]; 
                ?> 
               <article id="row_<?php echo $post->ID;?>" class="table_row"> 
               <div class="ar_td first"> 
                <span class="ar_td_t"><?php echo do_shortcode('[ratings id="'.$post->ID.'"]');?></span> 
               </div> 
               <div class="ar_td second"> 
                <span class="ar_td_t"><?php echo date("d-m-Y", strtotime(get_field('m_f_data',$post->ID)));?></span> 
               </div> 
               <div class="ar_td third"> 
                <a href="<?php echo $permalink;?>"><span class="ar_td_t"><?php echo $post->post_title;?></span></a> 
               </div> 
               <div class="ar_td fourth"> 
               <a href="<?php echo site_url();?>/geo/?location=<?php echo $l->luogo;?>"> <span class="ar_td_t"><?php echo $l->luogo;?></span></a> 
               </div> 
               <div class="ar_td fifth"> 
                <span class="ar_td_t"><?php echo get_field('m_f_percorso_lungo',$post->ID);?></span> 
               </div> 
               <div class="ar_td sixth"> 
                <a href="javascript:void(0);" onclick="show_info('div_<?php echo $post->ID;?>','row_<?php echo $post->ID;?>');" class="show_button">Info +</a> 
               </div> 
               </article> 
               <div id="div_<?php echo $post->ID;?>" class="div_content"> 
               <?php get_post_fields($post->ID);?> 
               </div> 
                <?php 
                } 
               ?> 
               </div> 
              </section> 
       <?php 
       exit(); 
      } 

function paginate_function($item_per_page, $current_page, $total_records, $total_pages) 
    { 
     $pagination = ''; 
     if($total_pages > 0 && $total_pages != 1 && $current_page <= $total_pages){ //verify total pages and current page number 
      $pagination .= '<ul class="pagination">'; 

      $right_links = $current_page + 3; 
      $previous  = $current_page - 3; //previous link 
      $next   = $current_page + 1; //next link 
      $first_link  = true; //boolean var to decide our first link 

      if($current_page > 1){ 
       $previous_link = ($previous==0)?1:$previous; 
       $pagination .= '<li class="first"><a href="#" data-page="1" title="First">&laquo;</a></li>'; //first link 
       $pagination .= '<li><a href="#" data-page="'.$previous_link.'" title="Previous">&lt;</a></li>'; //previous link 
        for($i = ($current_page-2); $i < $current_page; $i++){ //Create left-hand side links 
         if($i > 0){ 
          $pagination .= '<li><a href="#" data-page="'.$i.'" title="Page'.$i.'">'.$i.'</a></li>'; 
         } 
        } 
       $first_link = false; //set first link to false 
      } 

      if($first_link){ //if current active page is first link 
       $pagination .= '<li class="first active">'.$current_page.'</li>'; 
      }elseif($current_page == $total_pages){ //if it's the last active link 
       $pagination .= '<li class="last active">'.$current_page.'</li>'; 
      }else{ //regular current link 
       $pagination .= '<li class="active">'.$current_page.'</li>'; 
      } 

      for($i = $current_page+1; $i < $right_links ; $i++){ //create right-hand side links 
       if($i<=$total_pages){ 
        $pagination .= '<li><a href="#" data-page="'.$i.'" title="Page '.$i.'">'.$i.'</a></li>'; 
       } 
      } 
      if($current_page < $total_pages){ 
        $next_link = ($i > $total_pages)? $total_pages : $i; 
        $pagination .= '<li><a href="#" data-page="'.$next_link.'" title="Next">&gt;</a></li>'; //next link 
        $pagination .= '<li class="last"><a href="#" data-page="'.$total_pages.'" title="Last">&raquo;</a></li>'; //last link 
      } 

      $pagination .= '</ul>'; 
     } 
     return $pagination; //return pagination links 
    } 

ajax:

jQuery("#get_table").load(ajaxurl,{'action':'get_table','cat':cat,'page':page}); 

Il codice sta lavorando bene, per ottenere posti e anche l'impaginazione lavorando bene, l'unica cosa che sono in grado di capire, che come posso fare questa cosa accada da utilizzare direttamente sulla pagina in cui sono presenti i post con la data di corrispondenza corrente.

risposta

0

È necessario verificare l'indice dell'articolo che si desidera visualizzare. Puoi farlo usando la stessa query che stai utilizzando per contare le righe totali ma escludendo tutto ciò che è successivamente la data selezionata. Quindi è possibile trovare la pagina che si suppone sia accesa dividendo le righe trovate dalla dimensione della pagina.

versione semplice sarebbe (codice semplificato):

$page_size = 10; 
$total_rows = count($db->query("SELECT * FROM events;")); 
$past_present_rows = count($db->query("SELECT * FROM events WHERE date <= '2015-05-24';")); 
$desired_page = ceil($past_present_rows/$page_size); // Use floor() if the first page is 0, ceil() is first page is 1. 

Quindi, se l'applichiamo al codice fornito:

function get_table(){ 
    global $wpdb; 
    $c_cid = $_REQUEST['cat']; 
    $item_per_page = 20; 
    if(isset($_REQUEST["page"])){ 
     $page_number = filter_var($_REQUEST["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH); //filter number 
     if(!is_numeric($page_number)){die('Invalid page number!');} //incase of invalid page number 
     }else{ 
      $get_past_row = $wpdb->get_results("SELECT wp_posts.* FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) WHERE wp_term_taxonomy.taxonomy = 'tipo_manifestazione' AND wp_term_taxonomy.term_id = $c_cid AND wp_posts.post_status = 'publish' AND (wp_posts.vip = 'NULL' OR wp_posts.vip IS NULL) AND wp_posts.post_type = 'manifestazione' AND wp_post.man_date <= '2015-05-24' GROUP BY wp_posts.ID ORDER BY wp_posts.ID DESC"); 
      $get_past_rows = count($get_past_row); 
      $page_number = ceil($get_past_rows/$item_per_page); 
     } 
     //get total number of records from database for pagination 
     $get_total_row = $wpdb->get_results("SELECT wp_posts.* FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) WHERE wp_term_taxonomy.taxonomy = 'tipo_manifestazione' AND wp_term_taxonomy.term_id = $c_cid AND wp_posts.post_status = 'publish' AND (wp_posts.vip = 'NULL' OR wp_posts.vip IS NULL) AND wp_posts.post_type = 'manifestazione' GROUP BY wp_posts.ID ORDER BY wp_posts.ID DESC"); 
     ... 
5

ho capito questo con la mia auto.

Utilizzando la seguente query ottengo i post con la data corrente e le date che vengono passate.

$date = date("Y-m-d"); 
$posts_c = $wpdb->get_results("SELECT * FROM wp_posts WHERE wp_posts.man_date <= $date"); 

con codice di cui sopra mi metterò le righe ed ora cerchiamo di convertirli in un conteggio

$get_count = count($posts_c); 

Ora quello che ho fatto è stato dividere il numero dei posti, per numero di posti per pagina che è 20

$page_on = ceil($get_count/20); 

Questo è $ page_on oggetto contiene il valore della pagina in cui invieremo il nostro utente.

+0

Non è questa la risposta che ho postato due giorni prima? –

+0

Sì, mi dispiace, non so perché l'ho pubblicato, btw ha cambiato la risposta accettata e ti ha assegnato una taglia. :). –

+0

Grazie per la correzione :) –