[wp-testers] apply_filters()

Karl Wångstedt maillist at wangstedt.net
Tue May 26 16:39:18 GMT 2009


26 maj 2009 kl. 16.07 skrev Jennifer Hodgdon:

> Maybe if you posted some of your code, we could see what is going  
> wrong? You can definitely apply filters without echoing the result,  
> to make something "filterable" in your theme... Example:
>
> a) In your parent theme, do something like this:
>
> $myvariable = apply_filters( 'my_filter_name', $myvariable );
>
> b) In a plugin or subtheme's functions.php, do something like this:
>
> add_filter( 'my_filter_name', 'my_filter_func' );
>
> function my_filter_func( $input ) {
>   $input .= ' additional text added to end'; // or other filtering
>   return $input;
> }


That is exactly what I did, but still the filter only gets applied  
when I echo the result.

This is the parent theme function:

function KEW_short_excerpt($text = '', $max_length = 100, $preserve =  
'<p>', $replace = '', $replacement = '')
{
	global $post;

	$text = trim($text);

	if ( $text == '' )
	{
		$content = $post->post_content;
		
		$excerpt = apply_filters('the_content', $content);		

		$excerpt = trim(strip_tags($excerpt,$preserve.' '.$replacement)); //  
Rensa bort formatering förutom de taggar som listas

		$words = preg_split("/(?<=(\.|!|\?)+)\s/", $excerpt, -1,  
PREG_SPLIT_NO_EMPTY);

		foreach ( $words as $word )
		{
			$new_text = $text . substr($excerpt, 0, strpos($excerpt, $word) +  
strlen($word));
			$excerpt = substr($excerpt, strpos($excerpt, $word) +  
strlen($word), strlen($excerpt));

			if ( ( strlen($text) != 0 ) && ( strlen($new_text) > $max_length ) )
			{
				$text .= " [...]";
				break;
			}

			$text = $new_text;
		}
	
	
	}
	// Se till att öppnade taggar avslutas (kräver att WP är inställt  
på att automatiskt korrigera felaktig XHTML
	$text = balanceTags($text, 0, true);
	$text = wpautop($text); // Kolla så att alla taggar är stängda och  
att de verkligen finns.
	
	// För att länka all text i excerpten till posten
	//$text = preg_replace('{(<(p|h[1-6])[^>]*>)([^<>]*?)(</(p| 
h[1-6])>)}','\1<a href="'.get_permalink($post->ID).'">\3</a>\4',$text);

	
		// Här byter vi ut taggar i excerpten mot en ny ($replacement)
		// Den tagg som ska bytas måste finnas i $preserve i templaten för  
att det ska funka
		if($replace && $replacement) {
			$replacement_tag = substr($replacement,1,2); // Bryt ut hn ur <hn>  
från taggen som ska vara kvar
			$replacement_end = '</'.$replacement_tag.'>'; // Skapa  
avslutningstagg
			$replace_tag = substr($replace,1,2); // Bryt ut hn ur <hn> från  
taggen som ska bort
			$replace_end = '</'.$replace_tag.'>'; // Skapa avslutningstagg
			
			$text = str_replace($replace, $replacement, $text); // Byt ut  
starttaggarna
			$text = str_replace($replace_end, $replacement_end, $text); // Byt  
ut sluttaggarna
		}
	
	echo apply_filters('_short_excerpt',$text);
	//return apply_filters('_short_excerpt',$text);
}

The two last rows is what I'm toggling between. If I use return the  
filter doesn't gets applied, but if I use echo it does.

This is what's in the child theme:

function KEW_add_cat_name_to_short_excerpt($text=''){
	global $post;
	
	$categories = get_the_category($post->ID);
	$name = $categories[0]->cat_name;
		$text = preg_replace('/<p>/','<p><span class="run-in">▸ '.$name.'</ 
span>&nbsp;',$text); // KEW_short_excerpt
		
	return $text;

}
add_filter('_short_excerpt','KEW_add_cat_name_to_short_excerpt');

Vänligen
Karl Wångstedt
----------------------------------
          Wångstedt  nova
         www.wangstedt.net

Karl Wångstedt       0278-61 12 33
Stenhuggarvägen 3g   070-578 13 04
821 41  BOLLNÄS
----------------------------------
Det här brevet skickades med en Macintosh från Apple.
Garanterat virusfri med Mac OS X.


More information about the wp-testers mailing list