php - Custom post type column which compares dates?

admin2025-06-06  7

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',
            array(
                'key' => 'visitor-start-date',
                'value' => $time,
                'compare' => '<='
            ),
            array(
                'key' => 'visitor-end-date',
                'value' => $time,
                'compare' => '>='
            ),
        ) );
    }
}
add_action( 'pre_get_posts', 'filter_search_results' );

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',
            array(
                'key' => 'visitor-start-date',
                'value' => $time,
                'compare' => '<='
            ),
            array(
                'key' => 'visitor-end-date',
                'value' => $time,
                'compare' => '>='
            ),
        ) );
    }
}
add_action( 'pre_get_posts', 'filter_search_results' );
Share Improve this question asked Nov 16, 2018 at 9:37 joq3joq3 3813 silver badges21 bronze badges 2
  • A column in the admin? Or on the front end? – Jacob Peattie Commented Nov 16, 2018 at 9:39
  • @JacobPeattie in the admin pages, sorry for not making it clear. – joq3 Commented Nov 16, 2018 at 9:39
Add a comment  | 

1 Answer 1

Reset to default 3

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?

转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1749175963a316998.html

最新回复(0)