81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| 
 | |
| /*
 | |
|  * Plugin Name: ReadMore
 | |
|  * Plugin URI: http://www.nowhereland.it/
 | |
|  * Description: ReadMore plugin. Chops a lengthy entry and appends a "read more" link :)
 | |
|  * Author: NoWhereMan
 | |
|  * Version: 0.703
 | |
|  * Author URI: http://www.nowhereland.it/
 | |
|  */
 | |
| 
 | |
| // $MODE specifies when you want to chop your entry
 | |
| 
 | |
| // 'auto' will chop your entry at the value
 | |
| // specified in $CHOP_AT
 | |
| 
 | |
| // 'manual' will chop your entry only when a [more] tag is found in
 | |
| // the content
 | |
| 
 | |
| // 'semiauto' will chop your entry at the [more] tag. If no such a tag
 | |
| // is found, the entry is chopped at the value specified in $CHOP_AT
 | |
| 
 | |
| // 'sentence' will chop your entry after $CHOP_AT sentences
 | |
| 
 | |
| // WARNING! 'auto' and 'semiauto' modes need improvements! unclosed tags
 | |
| // at the chop point will probably result in validation errors!
 | |
| // If you're willing to improve it (using a quick but efficient algorithm
 | |
| // feel free and then let us know :) )
 | |
| 
 | |
| // we recommend using $MODE = 'manual' (SPB legacy behaviour :) )
 | |
| function plugin_readmore_main($string) {
 | |
| 	global $fp_params;
 | |
| 
 | |
| 	$MODE = 'manual';
 | |
| 
 | |
| 	$CHOP_AT = 4; // characters or sentences
 | |
| 
 | |
| 	$lang = lang_load('plugin:readmore');
 | |
| 	$readmoreString = $lang ['plugin'] ['readmore'] ['readmore'];
 | |
| 
 | |
| 	global $fpdb;
 | |
| 	$q = & $fpdb->getQuery();
 | |
| 
 | |
| 	if (($q && !$q->single) && !isset($_GET ['page'])) {
 | |
| 		if ($q)
 | |
| 			list ($id) = $q->getLastEntry();
 | |
| 		else
 | |
| 			$id = '';
 | |
| 
 | |
| 		if ($MODE == 'auto' || $MODE == 'semiauto') {
 | |
| 			if (strlen($string) > $CHOP_AT) {
 | |
| 
 | |
| 				return substr($string, 0, $CHOP_AT) . "… <span class=\"readmore\"><a href=\"" . get_permalink($id) . "#readmore-{$id}\">" . $readmoreString . "</a></span>";
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if ($MODE == 'manual' || $MODE == 'semiauto') {
 | |
| 			if (($p = strpos($string, '[more]')) !== false) {
 | |
| 				return substr($string, 0, $p) . "<span class=\"readmore\"><a href=\"" . get_permalink($id) . "#readmore-{$id}\">" . $readmoreString . "</a></span>";
 | |
| 			}
 | |
| 		} elseif ($MODE == 'sentence') {
 | |
| 			$matches = array();
 | |
| 			if ($v = preg_match_all('|[.!?]\s|', $string, $matches, PREG_OFFSET_CAPTURE)) {
 | |
| 				if (count($matches [0]) > $CHOP_AT) {
 | |
| 					$string = substr($string, 0, $matches [0] [$CHOP_AT - 1] [1]) . ". <span class=\"readmore\"><a href=\"" . get_permalink($id) . "#readmore-{$id}\">" . $readmoreString . "</a></span>";
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if (($q && $q->single) || isset($fp_params ['entry'])) {
 | |
| 		$string = str_replace('[more]', "<a id=\"readmore-{$fp_params['entry']}\"></a>", $string);
 | |
| 	}
 | |
| 
 | |
| 	return $string;
 | |
| }
 | |
| 
 | |
| add_filter('the_content', 'plugin_readmore_main', 1);
 | |
| 
 | |
| ?>
 | 
