The paragraphs are done by the wpautop()
function, hooked to the_content
, the_excerpt()
& comment_text
as well as 'term_description'
for taxonomies.
The plugin linked by @javipas does an enormous effort to just add this, but it’s a good example (+1). You can (modify it a little and) take the following part out of it:
// The init function
function wpse24553_add_p_the_content()
{
add_filter( 'the_content', 'wpse24553_p_the_content' );
add_filter( 'the_content_feed', 'wpse24553_p_the_content' );
}
add_action( 'init', 'wpse24553_add_p_the_content' );
// The actual modification function
function wpse24553_p_the_content( $the_content )
{
global $post;
$content_by_p = preg_split( '/<\/p>/is', $the_content );
$i = 0;
// Set a var to count until the targeted <p> is met - change this to your needs
// Set to empty '' if you want to modify every paragraph
$targeted_p = 1;
static $new_content="";
foreach ( $content_by_p as $key => $p )
{
$i++;
// abort and return the modified content if we're beyond the targeted <p>
if ( $i > $targeted_p )
{
$new_content .= $p;
continue;
}
// Remove empty space at the end of a paragraph, then remove original <p>-tag
$p = rtrim( $p );
$p = preg_replace( '/<p>/is', '', $p );
// Wrap replacements in new <p>-tags, so it validates
$new_content .= '<p class="paragraph-link"><a name="p-'.$key.'"></a>';
// Prepend the graf with an anchor tag
$new_content .= '<a ref="permalink" title="Permalink to this paragraph" href="'.get_permalink( $post->ID ).'#p-'.$key.'">#</a>;
$new_content .= $p;
$new_content .= '</p>';
}
// Return the new content
return $new_content;
}
Notes:
- The function needs to be placed in your functions.php
- You need to alter the function and what gets added/removed/modified with a single paragraph by yourself (no use case in the Q).
- The function currently is not tested.