WordPress.org

Support

Support » Plugins and Hacks » [Resolved] Display a date between 2 month

[Resolved] Display a date between 2 month

Viewing 15 replies - 1 through 15 (of 23 total)
  • angelo_nwl

    @angelo_nwl

    NetWebLogic Support

    you can try something like #j #M #Y #@_{ \u\n\t\i\l j M Y}

    http://wp-events-plugin.com/documentation/placeholders/

    Thanks, it works fine, but i need also that if is the same month, i won’t display it twice like this:

    13 aug 2013 – 27 aug 2013

    correct form would be:
    13 – 27 aug 2013 or 31 aug 2013 – 01 sept 2013

    is possible to have this solution?

    Hiya,

    That isn’t possible out of the box I’m afraid. You would need to creaet your own conditional placeholder to detect the month.

    See http://wp-events-plugin.com/tutorials/creating-conditional-placeholders-for-events/ for more details on how to do that.

    Cheers,
    Phil

    angelo_nwl

    @angelo_nwl

    NetWebLogic Support

    try this snippet – http://pastebin.com/LecuD8bp

    *paste in your theme functions.php

    Hi angelo_nwl,

    your snippet check if the date is more long than one day, so it is not useful for my purpose. I need to check if the month is the same or if it’s different, like philipjohn said…

    Is maybe possible to check what is the month on the output of $EM_Event->event_start_date ?

    angelo_nwl

    @angelo_nwl

    NetWebLogic Support

    you can use that snippet as a starting point then add new conditions to achieve your objectives.

    We wrestled with the same a year ago and had to create and maintain our own custom placeholder for this.

    Hopefully this capability will be added to EM so that you can specify a shortcode where a year, month, date or time will be output only if it’s different from the start/end time. If it would be denoted with %, one could then have a shortcode like #j.#%_{n\.}#%Y#@_{ \- j\.n\.Y} with the following results:

    • If there’s only a start date, it will be output as 20.5.2013.
    • If start and end date exist and their month and year are the same: 5. – 29.11.2013.
    • -“- month is different but year is the same: 5.11. – 5.12.2013
    • -“- month and year are different: 5.11.2013 – 5.1.2014

    #%Y is interpreted and printed only when different from the opposing (end) date.

    #%_{} characters between the {} are interpreted and printed only when different from the opposing (end) date. If the only characters that would be printed are escaped literals such as \., nothing is printed.

    As an important side note, something should be considered different from the opposing (end) date always when it (eg. month) is different OR when anything larger than it (eg. year) is different. This way we won’t have an event that lasts one year being output as 5.2013 – 5.11.2014 without the month. When checking for the month, it should be treated as different because the year is different.

    Thanks for explanation.

    I’m not an expert developer, so can you tell how create a shortcode or a placeholder with these comparison criteria?

    Everything from the second paragraph onwards was just a suggestion on how the plugin could be developed in the future.

    To add a custom placeholder you should make a custom plugin, or as a possible workaround, just use your theme’s functions.php (by pasting any new PHP code there).

    What we use is:

    add_filter( 'em_event_output_placeholder', 'my_custom_event_placeholders', 1, 3);
    /**
    * Custom Events Manager placeholders
    * @param string $result
    * @param EM_Event $EM_Event
    * @param string $placeholder
    * @return string
    */
    function my_custom_event_placeholders( $replace, $EM_Event, $result ) {
        global $wp_query, $wp_rewrite;
        switch ( $result ) {
    		case '#_CUSTOMDATEPLACEHOLDERNAME':
    			$replace = '';
    			$start_date = strtotime( $EM_Event->event_start_date );
    			$end_date = strtotime( $EM_Event->event_end_date );
    			$replace = date_i18n( 'D j.n.Y', $start_date );
    			$timediff = $end_date - $start_date;
    			if ( $timediff > 86400 || ( $timediff == 86400 && $EM_Event->event_start_time <= $EM_Event->event_end_time ) ) {
    				// lasts 24h or longer, print end date
    				$replace .= ' - ' . date_i18n( 'D j.n.Y', $end_date );
    			}
    //			$replace = __( apply_filters( 'em_event_output_placeholder', $replace ) );
    			break;
    	}
    	return $replace;
    }

    Now wherever you use #_CUSTOMDATEPLACEHOLDERNAME, you get the same output as with #_EVENTDATES with one exception: the end date is printed only of the beginning and end times are more than 24 hours apart. For example an event from 10:00 to 11:00 on a single day or an event from 18:00 to 02:00 would only show the start date.

    This uses a predefined time format D j.n.Y that can be changed only directly at the code. Another option is replacing 'D j.n.Y' with eg. get_option('dbem_date_format') to use the one value of Events > Settings > Formatting > Date and time > Date formatting. As we wanted to have one value for that to use in eg. event lists and then another one on the individual event pages, we had to use a fixed setting.

    EM devs: the example in http://wp-events-plugin.com/tutorials/creating-conditional-placeholders-for-events/ could be expanded. It took us some pondering to figure out how to do the above, especially as copying a core placeholder and modifying it didn’t work directly (references to this needed to be changed to $EM_Event for events, and different for locations and categories). Explaining those up-front could go a long way especially for siteadmins who don’t have test sites and would crash their main site with a code that incorrectly references this.

    Plugin Author Marcus

    @netweblogic

    where do you see references to $this?

    Plugin Author Marcus

    @netweblogic

    actually, pls post on a new thread as this’ll go off-topic

    I have used the code above and it works fine, but only in local…

    This is the code modified by me:

    add_filter( 'em_event_output_placeholder', 'my_custom_event_placeholders', 1, 3);
    /**
    * Custom Events Manager placeholders
    * @param string $result
    * @param EM_Event $EM_Event
    * @param string $placeholder
    * @return string
    */
    function my_custom_event_placeholders( $replace, $EM_Event, $result ) {
        switch ( $result ) {
    		case '#_CUSTOMEVENTDATES':
    			$replace = '';
    			$start_date = strtotime( $EM_Event->event_start_date );
    			$end_date = strtotime( $EM_Event->event_end_date );
    			$timediff = $end_date - $start_date;
    
    			// Check if the number of the day is different
    			if ( $timediff >= 86400 ) {
    
    				// Check if is the same month
    				if ( date_i18n( 'M', $end_date ) == date_i18n( 'M', $start_date ) ) {
    
    					// Print only the start day
    					$replace = date_i18n( 'j', $start_date ). ' - ' . date_i18n( 'j M Y', $end_date );
    
    				}else{
    
    					// Check if is the same year
    					if ( date_i18n( 'Y', $end_date ) == date_i18n( 'Y', $start_date ) ) {
    
    						// Print only the start day and month
    						$replace = date_i18n( 'j M', $start_date ). ' - ' . date_i18n( 'j M Y', $end_date );
    
    					}else{
    
    						// Print the complete start and end date
    						$replace = date_i18n( 'j M Y', $start_date ). ' - ' . date_i18n( 'j M Y', $end_date );
    
    					}	
    
    				}
    
    			}else{
    
    				$replace = date_i18n( 'j M Y', $start_date );
    
    			}
    
    			$replace = __( apply_filters( 'em_event_output_placeholder', $replace ) );
    			break;
    	}
    	return $replace;
    }

    when i use this code on functions.php in the online site, it gives me this error:

    Warning: Missing argument 2 for em_event_output_placeholder() in …/wp-content/plugins/events-manager/classes/em-event.php on line 2144

    Warning: Missing argument 3 for em_event_output_placeholder() in …/wp-content/plugins/events-manager/classes/em-event.php on line 2144

    Warning: Missing argument 2 for my_custom_event_placeholders() in …/wp-content/themes/vita_e_crescita/functions.php on line 722

    Warning: Missing argument 3 for my_custom_event_placeholders() in …/wp-content/themes/vita_e_crescita/functions.php on line 722

    Where am i wrong?

    Daniele, in that case you may need to create a custom plugin instead. You could try the instruction I’ve outlined in http://wordpress.org/support/topic/expanding-the-tutorial-for-creating-conditional-placeholders:

    1. Create a folder: wp-content/plugins/my-em-custom
    2. Create a file: wp-content/plugins/my-em-custom/my-em-custom.php
    3. Copy-paste this content to that file and save it: <content>
    4. Go to WP admin panel and enable the plugin

    In this case <content> would be these lines first and the above code after:

    <?php
    /*
    Plugin Name: Events Manager customizations for My Site
    Version: 0.1
    Description: Custom scopes and other customizations to Events Manager for My Site
    Author: Me
    */

    If any plugin customizations you make break the whole site including wp-admin, you can disable the plugin by renaming its folder or completely remove it (make a backup first if it’s your own code!). This works for any plugin or theme causing issues.

    Daniele, I’m replying here to your message at http://wordpress.org/support/topic/expanding-the-tutorial-for-creating-conditional-placeholders?replies=2#post-4457996 to keep the messages related to solving your issue in one thread 🙂

    To narrow down the cause for your warnings, you can try disabling certain parts of the code. To disable one line, add // to the beginning of it, and to disable many mark the start of the disabled code with /* and the end with */. Those symbols mark something as a comment instead of actual code that would be executed.

    To clarify, do you get any warnings without this piece of code? When you get the warnings, where exactly do you get them? Is there a placeholder used where the errors occur? Which one? Do other placeholders work normally?

Viewing 15 replies - 1 through 15 (of 23 total)
  • The topic ‘[Resolved] Display a date between 2 month’ is closed to new replies.