How can I hyperlink calendar days that have post
-
I have a widget that was custom created to display a calendar.
The code for the widget looks like the following:<?php class __themename_Most_recent_widget extends WP_Widget{ /* * The constructor is what allows us to print the Title and the description for the widget * The parent contructor receives three arguments: widget name, the Title( which receives the title and the themename), the description(an array) * */ /********************* PROPERTY ********************/ private $dayLabels = array("Mon","Tue","Wed","Thu","Fri","Sat","Sun"); private $currentYear=0; private $currentMonth=0; private $currentDay=0; private $currentDate=null; private $daysInMonth=0; private $naviHref= null; public function __construct(){ parent::__construct( '_themename_most_recent_widget', esc_html__('Recent Posts', '_themename'), ['description' => esc_html__('some description', '_themename')] ); } /* * This is what gets printed in the front-end * */ public function widget($args, $instance){ echo $this->show(); } /********************* PUBLIC **********************/ /** * print out the calendar */ public function show() { $year == null; $month == null; if(null==$year&&isset($_GET['year'])){ $year = $_GET['year']; }else if(null==$year){ $year = date("Y",time()); } if( null == $month && isset($_GET['month']) ){ $month = $_GET['month']; } elseif ( null==$month ) { $month = date("m",time()); } $this->currentYear=$year; $this->currentMonth=$month; $this->daysInMonth=$this->_daysInMonth($month,$year); $content='<div id="calendar">'. '<div class="box">'. $this->_createNavi(). '</div>'. '<div class="box-content">'. '<ul class="label">'.$this->_createLabels().'</ul>'; $content.='<div class="clear"></div>'; $content.='<ul class="dates">'; $weeksInMonth = $this->_weeksInMonth($month,$year); // Create weeks in a month for( $i=0; $i<$weeksInMonth; $i++ ){ //Create days in a week for($j=1;$j<=7;$j++){ $content.=$this->_showDay($i*7+$j); } } $content.='</ul>'; $content.='<div class="clear"></div>'; $content.='</div>'; $content.='</div>'; return $content; } /********************* PRIVATE **********************/ /** * create the li element for ul */ private function _showDay($cellNumber){ if($this->currentDay==0){ $firstDayOfTheWeek = date('N',strtotime($this->currentYear.'-'.$this->currentMonth.'-01')); if(intval($cellNumber) == intval($firstDayOfTheWeek)){ $this->currentDay=1; } } if( ($this->currentDay!=0)&&($this->currentDay<=$this->daysInMonth) ){ $this->currentDate = date('Y-m-d',strtotime($this->currentYear.'-'.$this->currentMonth.'-'.($this->currentDay))); $cellContent = $this->currentDay; $this->currentDay++; }else{ $this->currentDate =null; $cellContent=null; } $args = [ 'post_type' => 'post', 'category_name' => 'events' ]; $query = new WP_Query( $args ); var_dump($currentDate); /*if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); return '<li id="li-'.$this->currentDate.'" class="'.($cellNumber%7==1?' start ':($cellNumber%7==0?' end ':' ')). ($cellContent==null?'mask':'').'"><a href="'. get_the_permalink() .'">'.$cellContent.'</a></li>'; } } else { return '<li id="li-'.$this->currentDate.'" class="'.($cellNumber%7==1?' start ':($cellNumber%7==0?' end ':' ')). ($cellContent==null?'mask':'').'">'.$cellContent.'</li>'; wp_reset_postdata();}*/ return '<li id="li-'.$this->currentDate.'" class="'.($cellNumber%7==1?' start ':($cellNumber%7==0?' end ':' ')). ($cellContent==null?'mask':'').'">'.$cellContent.'</li>'; } /** * create navigation */ private function _createNavi(){ $nextMonth = $this->currentMonth==12?1:intval($this->currentMonth)+1; $nextYear = $this->currentMonth==12?intval($this->currentYear)+1:$this->currentYear; $preMonth = $this->currentMonth==1?12:intval($this->currentMonth)-1; $preYear = $this->currentMonth==1?intval($this->currentYear)-1:$this->currentYear; return '<div class="header">'. '<a>naviHref.'?month='.sprintf('%02d',$preMonth).'&year='.$preYear.'">Prev</a>'. '<span class="title">'.date('Y M',strtotime($this->currentYear.'-'.$this->currentMonth.'-1')).'</span>'. '<a>naviHref.'?month='.sprintf("%02d", $nextMonth).'&year='.$nextYear.'">Next</a>'. '</div>'; } /** * create calendar week labels */ private function _createLabels(){ $content=''; foreach($this->dayLabels as $index=>$label){ $content.='<li class="'.($label==6?'end title':'start title').' title">'.$label.'</li>'; } return $content; } /** * calculate number of weeks in a particular month */ private function _weeksInMonth($month=null,$year=null){ if( null==($year) ) { $year = date("Y",time()); } if(null==($month)) { $month = date("m",time()); } // find number of days in this month $daysInMonths = $this->_daysInMonth($month,$year); $numOfweeks = ($daysInMonths%7==0?0:1) + intval($daysInMonths/7); $monthEndingDay= date('N',strtotime($year.'-'.$month.'-'.$daysInMonths)); $monthStartDay = date('N',strtotime($year.'-'.$month.'-01')); if($monthEndingDay<$monthStartDay){ $numOfweeks++; } return $numOfweeks; } /** * calculate number of days in a particular month */ private function _daysInMonth($month=null,$year=null){ if(null==($year)) $year = date("Y",time()); if(null==($month)) $month = date("m",time()); return date('t',strtotime($year.'-'.$month.'-01')); } } function __themename_register_most_recent_widget(){ register_widget('__themename_Most_recent_widget'); } add_action('widgets_init', '__themename_register_most_recent_widget'); What I want is the following: For each day of the month, It should check if there is a post on that specific day that belongs to the events category. If there is one, then that day must be hyperlinked with the post permalink. How can I achieve this? I attempted to add the loop inside the __showDay function but it hyperlinked all the days with the link of the same post. private function _showDay($cellNumber){ if($this->currentDay==0){ $firstDayOfTheWeek = date('N',strtotime($this->currentYear.'-'.$this->currentMonth.'-01')); if(intval($cellNumber) == intval($firstDayOfTheWeek)){ $this->currentDay=1; } } if( ($this->currentDay!=0)&&($this->currentDay<=$this->daysInMonth) ){ $this->currentDate = date('Y-m-d',strtotime($this->currentYear.'-'.$this->currentMonth.'-'.($this->currentDay))); $cellContent = $this->currentDay; $this->currentDay++; }else{ $this->currentDate =null; $cellContent=null; } $args = [ 'post_type' => 'post', 'category_name' => 'events' ]; $query = new WP_Query( $args ); var_dump($currentDate); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); return '<li id="li-'.$this->currentDate.'" class="'.($cellNumber%7==1?' start ':($cellNumber%7==0?' end ':' ')). ($cellContent==null?'mask':'').'"><a href="'. get_the_permalink() .'">'.$cellContent.'</a></li>'; } } else { return '<li id="li-'.$this->currentDate.'" class="'.($cellNumber%7==1?' start ':($cellNumber%7==0?' end ':' ')). ($cellContent==null?'mask':'').'">'.$cellContent.'</li>'; } wp_reset_postdata(); ($cellContent==null?'mask':'').'">'.$cellContent.'</li>'; }
Viewing 1 replies (of 1 total)
Viewing 1 replies (of 1 total)
- The topic ‘How can I hyperlink calendar days that have post’ is closed to new replies.