انجمن


تاریخی جلالی در custom post  (۲ نوشته)

  • nowruzian

    آفلاین
    عضو
    تعداد نوشته‌ها: ۲
    تشکر شده: ۴ بار
    # نوشته شده: ۱۰ سال پیش
    ۱ خرداد ۱۳۹۲ - ۰۸:۳۵

    سلام
    من از یک تم استفاده می کنم که وقایع را به صورت یه کاستوم پست ذخیره میکنه و از طریق یه ویجت در تم نمایش داده می شود.
    در موقع نوشتن اطلاعات مربوط به وقایع یه تاریخ و ساعت شروع داریم و یه تاریخ و ساعت پایان ولی با وجود فعال بودن افزونه جلالی باز میلادی هستش! چطور میشه شمسی کرد؟

    کل فولدر تم رو گشتم تنها دو فایل مربوط به event پیدا کردم.event-loop ,event-widget
    کد event-loop به صورت زیره:

    <?php wp_reset_query();
    
    $current_time = current_time('mysql');
    list( $today_year, $today_month, $today_day, $hour, $minute, $second ) = split( '([^0-9])', $current_time );
    $current_timestamp = $today_year . $today_month . $today_day . $hour . $minute;
    
    $meta_query = array(
    	array(
    		'key' => '_start_eventtimestamp',
    		'value' => $current_timestamp,
    		'compare' => '>'
    	)
    );
    
    $args = array(
    	'post_type' => 'event',
    	'meta_query' => $meta_query,
    	'meta_key' => '_start_eventtimestamp',
    	'orderby'=> 'meta_value_num',
    	'order' => 'ASC',
    	'posts_per_page' => 25,
    );
    
    $events = new WP_Query( $args );
    
    if ( $events->have_posts() ) {
    ?>
    
    <ul class="posts-archive archives-columns-one">
    
    <?php
    $i = 0;
    
    while ( $events->have_posts() ) : $events->the_post();
    unset($same_day,$same_time,$parentMeta); 
    
    $parentMeta = get_post_custom();
    $event_start_day = $parentMeta['_start_day'][0];
    $event_start_month = $parentMeta['_start_month'][0];
    $event_start_year = $parentMeta['_start_year'][0];
    $event_end_day = $parentMeta['_end_day'][0];
    $event_end_month = $parentMeta['_end_month'][0];
    $event_end_year = $parentMeta['_end_year'][0];
    $event_start_hour = $parentMeta['_start_hour'][0];
    $event_start_minute = $parentMeta['_start_minute'][0];
    $event_end_hour = $parentMeta['_end_hour'][0];
    $event_end_minute = $parentMeta['_end_minute'][0];
    
    $metaDateStart = "$event_start_day/$event_start_month/$event_start_year";
    $metaDateEnd = "$event_end_day/$event_end_month/$event_end_year";
    if ($event_start_hour != '00' && $event_start_minute != '00') {
    	$metaTimeStart = "$event_start_hour:$event_start_minute";
    }
    $metaTimeEnd = "$event_end_hour:$event_end_minute";
    $isoDateStart = "$event_start_year-$event_start_month-$event_start_day";
    $isoDateEnd = "$event_end_year-$event_end_month-$event_end_day";
    
    if ($metaDateEnd && ($metaDateEnd != $metaDateStart)) {
    	$metaDate = "$metaDateStart - $metaDateEnd";
    }
    else {
    	$metaDate = "$metaDateStart";
    }
    
    $day_start = date("j", mktime(0,0,0,$event_start_month, $event_start_day, $event_start_year));
    $month_start = date("F", mktime(0,0,0,$event_start_month, $event_start_day, $event_start_year));
    $day_end = date("j", mktime(0,0,0,$event_end_month, $event_end_day, $event_end_year));
    $month_end = date("F", mktime(0,0,0,$event_end_month, $event_end_day, $event_end_year));
    
    if (($day_start == $day_end) && ($month_start == $month_end)) {
    	$same_day = true;
    }
    
    if ($same_day && ($event_start_hour == $event_end_hour) && ($event_start_minute == $event_end_minute)) {
    	$same_time = true;
    }
    
    ?>
    
    	<li class="loop-post-single loop-post-border">
    		<?php
    		get_the_image( array( 'size' => 'loop-main', 'width' => 210, 'height' => 100, 'before' => '<div class="post-cover">', 'after' => '</div>' ) );
    		?>
    		<div class="post-excerpt">
    			<?php if ($metaDate) { ?>
    			<span class="meta-date">
    				<span class="value value-date"><?php echo $day_start; ?></span>
    				<span class="value value-month"><?php echo $month_start; ?></span>
    				<?php if ($same_day == false) { ?>
    				<span class="value value-date"> - <?php echo $day_end; ?></span>
    				<span class="value value-month"><?php echo $month_end; ?></span>
    				<?php } ?>
    				<?php if ($same_day == true && $same_time == false) { ?>
    				<span class="value value-time"> @ <?php echo "$event_start_hour:$event_start_minute - $event_end_hour:$event_end_minute"; ?></span>
    				<?php } ?>
    			</span><!-- .meta-date -->
    			<?php } ?>
    			<h2><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
    			<?php the_excerpt(); ?>
    		</div><!-- end .post-excerpt -->
    		<div class="cleaner">&nbsp;</div>
    	</li><!-- .loop-post-single -->
    
    	<?php endwhile; ?>
    
    </ul><!-- end .posts-list-->
    <?php } ?>
    
    <?php get_template_part( 'pagination'); ?>
    
    <?php wp_reset_query(); ?>
    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    نخ - تناسب اندام
  • nowruzian

    آفلاین
    عضو
    تعداد نوشته‌ها: ۲
    تشکر شده: ۴ بار
    # نوشته شده: ۱۰ سال پیش
    ۱ خرداد ۱۳۹۲ - ۱۱:۰۱

    البته باز هم گشتم و این رو پیدا کردم

    <?php
    
    $path = get_bloginfo('template_directory');
    
    /*
    Plugin Name:Event Posts
    Plugin URI: http://www.wptheming.com
    Description: Creates a custom post type for events with associated metaboxes.
    Version: 0.1
    Author: Devin Price
    Author URI: http://www.wptheming.com
    License: GPLv2 or later
    */
    
    /**
     * Flushes rewrite rules on plugin activation to ensure event posts don't 404
     * http://codex.wordpress.org/Function_Reference/flush_rewrite_rules
     */
    
    function ep_eventposts_activation() {
    	ep_eventposts();
    	flush_rewrite_rules();
    }
    
    register_activation_hook( __FILE__, 'ep_eventposts_activation' );
    
    function ep_eventposts() {
    
    	/**
    	 * Enable the event custom post type
    	 * http://codex.wordpress.org/Function_Reference/register_post_type
    	 */
    
    	global $path;
    
    	$labels = array(
    		'name' => __( 'برنامه کاری', 'eventposttype' ),
    		'singular_name' => __( 'برنامه کاری', 'eventposttype' ),
    		'add_new' => __( 'افزودن برنامه کاری', 'eventposttype' ),
    		'add_new_item' => __( 'افزودن برنامه کاری', 'eventposttype' ),
    		'edit_item' => __( 'ویراش برنامه کاری', 'eventposttype' ),
    		'new_item' => __( 'افزدون برنامه کاری جدید', 'eventposttype' ),
    		'view_item' => __( 'مشاهده برنامه های کاری', 'eventposttype' ),
    		'search_items' => __( 'جستجوی برنامه های کاری', 'eventposttype' ),
    		'not_found' => __( 'برنامه کاری مشاهده نشد', 'eventposttype' ),
    		'not_found_in_trash' => __( 'هیچ برنامه کاری در زباله دان مشاهده نشد.', 'eventposttype' )
    	);
    
    	$args = array(
        	'labels' => $labels,
        	'public' => true,
    		'supports' => array( 'title', 'editor', 'thumbnail', 'comments' ),
    		'capability_type' => 'post',
    		'rewrite' => array("slug" => "event"), // Permalinks format
    		'menu_position' => 5,
    		'menu_icon' => "$path/images/icons/calendar.png",  // Icon Path
    		'has_archive' => true
    	); 
    
    	register_post_type( 'event', $args );
    }
    
    add_action( 'init', 'ep_eventposts' );
    
    /**
     * Adds event post metaboxes for start time and end time
     * http://codex.wordpress.org/Function_Reference/add_meta_box
     *
     * We want two time event metaboxes, one for the start time and one for the end time.
     * Two avoid repeating code, we'll just pass the $identifier in a callback.
     * If you wanted to add this to regular posts instead, just swap 'event' for 'post' in add_meta_box.
     */
    
    function ep_eventposts_metaboxes() {
    	add_meta_box( 'ept_event_date_start', 'تاریخ و ساعت آغاز برنامه کاری', 'ept_event_date', 'event', 'side', 'default', array( 'id' => '_start') );
    	add_meta_box( 'ept_event_date_end', 'تاری و ساعت انتهای برنامه کاری', 'ept_event_date', 'event', 'side', 'default', array('id'=>'_end') );
    }
    add_action( 'admin_init', 'ep_eventposts_metaboxes' );
    
    // Metabox HTML
    
    function ept_event_date($post, $args) {
    	$metabox_id = $args['args']['id'];
    	global $post, $wp_locale;
    
    	// Use nonce for verification
    	wp_nonce_field( plugin_basename( __FILE__ ), 'ep_eventposts_nonce' );
    
    	$time_adj = current_time( 'timestamp' );
    	$month = get_post_meta( $post->ID, $metabox_id . '_month', true );
    
    	if ( empty( $month ) ) {
    		$month = gmdate( 'm', $time_adj );
    	}
    
    	$day = get_post_meta( $post->ID, $metabox_id . '_day', true );
    
    	if ( empty( $day ) ) {
    		$day = gmdate( 'd', $time_adj );
    	}
    
    	$year = get_post_meta( $post->ID, $metabox_id . '_year', true );
    
    	if ( empty( $year ) ) {
    		$year = gmdate( 'Y', $time_adj );
    	}
    
    	$hour = get_post_meta($post->ID, $metabox_id . '_hour', true);
    
        if ( empty($hour) ) {
            $hour = gmdate( 'H', $time_adj );
        }
    
        $min = get_post_meta($post->ID, $metabox_id . '_minute', true);
    
        if ( empty($min) ) {
            $min = '00';
        }
    
    	$month_s = '<select name="' . $metabox_id . '_month">';
    	for ( $i = 1; $i < 13; $i = $i +1 ) {
    		$month_s .= "\t\t\t" . '<option value="' . zeroise( $i, 2 ) . '"';
    		if ( $i == $month )
    			$month_s .= ' selected="selected"';
    		$month_s .= '>' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ) . "</option>\n";
    	}
    	$month_s .= '</select>';
    
    	echo $month_s;
    	echo '<input type="text" name="' . $metabox_id . '_day" value="' . $day  . '" size="2" maxlength="2" />';
        echo '<input type="text" name="' . $metabox_id . '_year" value="' . $year . '" size="4" maxlength="4" /> @ ';
        echo '<input type="text" name="' . $metabox_id . '_hour" value="' . $hour . '" size="2" maxlength="2"/>:';
        echo '<input type="text" name="' . $metabox_id . '_minute" value="' . $min . '" size="2" maxlength="2" />';
    
    }
    
    // Save the Metabox Data
    
    function ep_eventposts_save_meta( $post_id, $post ) {
    
    	if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
    		return;
    
    	if ( !isset( $_POST['ep_eventposts_nonce'] ) )
    		return;
    
    	if ( !wp_verify_nonce( $_POST['ep_eventposts_nonce'], plugin_basename( __FILE__ ) ) )
    		return;
    
    	// Is the user allowed to edit the post or page?
    	if ( !current_user_can( 'edit_post', $post->ID ) )
    		return;
    
    	// OK, we're authenticated: we need to find and save the data
    	// We'll put it into an array to make it easier to loop though
    
    	$metabox_ids = array( '_start', '_end' );
    
    	foreach ($metabox_ids as $key ) {
    
    	    $aa = $_POST[$key . '_year'];
    		$mm = $_POST[$key . '_month'];
    		$jj = $_POST[$key . '_day'];
    		$hh = $_POST[$key . '_hour'];
    		$mn = $_POST[$key . '_minute'];
    
    		$aa = ($aa <= 0 ) ? date('Y') : $aa;
    		$mm = ($mm <= 0 ) ? date('n') : $mm;
    		$jj = sprintf('%02d',$jj);
    		$jj = ($jj > 31 ) ? 31 : $jj;
    		$jj = ($jj <= 0 ) ? date('j') : $jj;
    		$hh = sprintf('%02d',$hh);
    		$hh = ($hh > 23 ) ? 23 : $hh;
    		$mn = sprintf('%02d',$mn);
    		$mn = ($mn > 59 ) ? 59 : $mn;
    
    		$events_meta[$key . '_year'] = $aa;
    		$events_meta[$key . '_month'] = $mm;
    		$events_meta[$key . '_day'] = $jj;
    		$events_meta[$key . '_hour'] = $hh;
    		$events_meta[$key . '_minute'] = $mn;
    	    $events_meta[$key . '_eventtimestamp'] = $aa . $mm . $jj . $hh . $mn;
    
        }
    
    	// Add values of $events_meta as custom fields
    
    	foreach ( $events_meta as $key => $value ) { // Cycle through the $events_meta array!
    		if ( $post->post_type == 'revision' ) return; // Don't store custom data twice
    		$value = implode( ',', (array)$value ); // If $value is an array, make it a CSV (unlikely)
    		if ( get_post_meta( $post->ID, $key, FALSE ) ) { // If the custom field already has a value
    			update_post_meta( $post->ID, $key, $value );
    		} else { // If the custom field doesn't have a value
    			add_post_meta( $post->ID, $key, $value );
    		}
    		if ( !$value ) delete_post_meta( $post->ID, $key ); // Delete if blank
    	}
    
    }
    
    add_action( 'save_post', 'ep_eventposts_save_meta', 1, 2 );
    
    /**
     * Helpers to display the date on the front end
     */
    
    // Get the Month Abbreviation
    
    function eventposttype_get_the_month_abbr($month) {
        global $wp_locale;
        for ( $i = 1; $i < 13; $i = $i +1 ) {
                    if ( $i == $month )
                        $monthabbr = $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) );
                    }
        return $monthabbr;
    }
    
    // Display the date
    
    function eventposttype_get_the_event_date() {
        global $post;
        $eventdate = '';
        $month = get_post_meta($post->ID, '_month', true);
        $eventdate = eventposttype_get_the_month_abbr($month);
        $eventdate .= ' ' . get_post_meta($post->ID, '_day', true) . ',';
        $eventdate .= ' ' . get_post_meta($post->ID, '_year', true);
        $eventdate .= ' at ' . get_post_meta($post->ID, '_hour', true);
        $eventdate .= ':' . get_post_meta($post->ID, '_minute', true);
        echo $eventdate;
    }
    
    // Add custom CSS to style the metabox
    /*
    add_action('admin_print_styles-post.php', 'ep_eventposts_css');
    add_action('admin_print_styles-post-new.php', 'ep_eventposts_css');
    
    function ep_eventposts_css() {
    	wp_enqueue_style('your-meta-box', plugin_dir_url( __FILE__ ) . '/event-post-metabox.css');
    }
    */
    
    /**
     * Customize Event Query using Post Meta
     *
     * @link http://www.billerickson.net/customize-the-wordpress-query/
     * @param object $query data
     *
     */
    function ep_event_query( $query ) {
    
    	// http://codex.wordpress.org/Function_Reference/current_time
    	$current_time = current_time('mysql');
    	list( $today_year, $today_month, $today_day, $hour, $minute, $second ) = split( '([^0-9])', $current_time );
    	$current_timestamp = $today_year . $today_month . $today_day . $hour . $minute;
    
    	global $wp_the_query;
    
    	if ( $wp_the_query === $query && !is_admin() && is_post_type_archive( 'event' ) ) {
    		$meta_query = array(
    			array(
    				'key' => '_start_eventtimestamp',
    				'value' => $current_timestamp,
    				'compare' => '>'
    			)
    		);
    		$query->set( 'meta_query', $meta_query );
    		$query->set( 'orderby', 'meta_value_num' );
    		$query->set( 'meta_key', '_start_eventtimestamp' );
    		$query->set( 'order', 'ASC' );
    		$query->set( 'posts_per_page', '2' );
    	}
    
    }
    
    add_action( 'pre_get_posts', 'ep_event_query' );
    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    نخ - تناسب اندام

درباره‌ی این موضوع



برچسب‌ها

هیچ برچسبی نیست.