91 lines
2.4 KiB
PHP
Executable File
91 lines
2.4 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
|
|
|
|
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}\">[Read More...]</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}\">[Read More...]</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}\">[Read More...]</a></span>";
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if ($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);
|
|
|
|
|
|
?>
|