'; /** * @var string the event html. */ protected $_html; /** * @var string The html for the footer of the event. */ protected $_html_footer = ''; /** * Caller identifier. Just for paranoid check in append_content method. * Expected 'calendar' or none. * * @var string */ protected $_caller = ''; /** * Registers proper filters for content modifications. * * @param array $params Function params. * * @return void Method does not return. */ public function render( array $params ) { $this->_html = $params['data']; if ( isset( $params['caller'] ) ) { $this->_caller = $params['caller']; } if ( isset( $params['footer'] ) ) { $this->_html_footer = $params['footer']; } if ( isset( $params['is_event'] ) ) { // Filter event post content, in single- and multi-post views add_filter( 'the_content', array( $this, 'event_content' ), PHP_INT_MAX - 1 ); return; } // Replace page content - make sure it happens at (almost) the very end of add_filter( 'the_content', array( $this, 'append_content' ), PHP_INT_MAX - 1 ); } /** * Append locally generated content to normal page content. By default, * first checks if we are in The Loop before outputting to prevent multiple * calendar display - unless setting is turned on to skip this check. * We should not append full calendar body to single event content as it * leads to "calendar" nesting if default calendar page contains calendar * shortcode. * * @param string $content Post/Page content * @return string Modified Post/Page content */ public function append_content( $content ) { if ( 'calendar' === $this->_caller && ! $this->_registry->get( 'calendar.state' )->append_content() ) { return $content; } $settings = $this->_registry->get( 'model.settings' ); // Include any admin-provided page content in the placeholder specified in // the calendar theme template. if ( $settings->get( 'skip_in_the_loop_check' ) || in_the_loop() ) { $content = str_replace( self::CALENDAR_PLACEHOLDER, $content, $this->_html ); $content .= $this->_html_footer; } return $content; } /** * event_content function * * Filter event post content by inserting relevant details of the event * alongside the regular post content. * * @param string $content Post/Page content * * @return string Post/Page content **/ public function event_content( $content ) { if ( ! $this->_registry->get( 'calendar.state' )->append_content() ) { $content = ''; } $to_return = $this->_html . $content; if ( isset( $this->_html_footer ) ) { $to_return .= $this->_html_footer; } // Pass the orginal content to the filter so that it can be modified return apply_filters( 'ai1ec_event_content', $to_return, $content ); } }