I have a custom post type where the posts have a start date and an end date. These are saved to the database as Unix timestamp/Epoch. I want to create a column for this custom post type called Active where I want to show a green icon when the current date and time is between the start and end date.

How do I pull the metadata and compare them to the current date/time and if true display a green icon, if not a red icon?

I have this function which does almost the same thing but for search results. But I cannot figure out how to use this in a column:

function filter_search_results( $search_query ) {
$time = current_time( 'timestamp' );
    if ( $search_query->is_search ) {
        $search_query->set( 'meta_query', array(
            'relation' => 'AND',
                'key' => 'visitor-start-date',
                'value' => $time,
                'compare' => '<='
                'key' => 'visitor-end-date',
                'value' => $time,
                'compare' => '>='
        ) );
add_action( 'pre_get_posts', 'filter_search_results' );
  • A column in the admin? Or on the front end? – Jacob Peattie Nov 16 '18 at 9:39
  • @JacobPeattie in the admin pages, sorry for not making it clear. – joq3 Nov 16 '18 at 9:39

I solved it:

  if ( 'visitor_active' == $column_name ) {
    $start_date = get_post_meta( $post_id, 'visitor-start-date', true );
    $end_date = get_post_meta( $post_id, 'visitor-end-date', true );
    $current_time = current_time( 'timestamp' );
      if ($start_date < $current_time && $end_date > $current_time) {
        echo '<span class="dashicons dashicons-yes" style="color:#75c377;"></span>';
      else {
        echo '<span class="dashicons dashicons-no" style="color:lightgray;"></span>';

Don't know if this is the best way to do it though?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.