Wordpress filter get_the_content() - wordpress

I'm writing a plugin that requires adding to the content; adding a filter to the_content() is straightforward enough, but the theme I'm testing in uses get_the_content() to build the page.
There's an indication that it should be possible in the Wordpress codex but I don't understand the example:
If you use plugins that filter content (add_filter('the_content')), then this will not apply the filters, unless you call it this way (using apply_filters):
apply_filters('the_content',get_the_content( $more_link_text, $stripteaser, $more_file ))
Can anyone help / explain?
Thanks,
David.

What they're saying is you'd have to add code to the place that get_the_content() is called. From your description, that's in the theme - you'd have to change the theme's get_the_content() call as described.
The reason for that is that there are no filters in the get_the_content() function that you can hook into with your plugin (have a look at the source - there are no calls to the apply_filters() function in get_the_content(), except one for the "more" link text).

Late to the party, but here it goes:
In your functions.php you can add something like this:
function do_filter_stuff($content) {
//Whatever you want to do with your content
}
add_filter( 'the_content', 'do_filter_stuff' );
Next, in your page.php (or whichever template you want to use it in) you can call the raw content with the same filter as following:
<?php echo do_filter_stuff(get_the_content()); ?>

Related

Modifying $post->post_content in WordPress

I'm using a template that seems to be outputting $post->post_content in the search page.
I maintain a plugin that uses a non-standard shortcode format and I'm trying to find out how can I filter $post->post_content before it gets displayed because currently my shortcode is not getting covered (again, not using the Shortcode API).
This has me stumped. Any help, I would appreciate.
I think you could use the_post action hook, that allows to modify the post object immediately after being queried and setup:
add_action('the_post', function($post, $query){
// do whatever you want to $post, for example:
$post->post_content = str_replace('{YOUR_SHORTCODE}', 'WHATEVER', $post->post_content);
}, 10, 2);

Customize search results for Custom Post Types

I am writing a Wordpress plug-in that creates several Custom Post Types (CPT). For they have their own custom fields, that need to be displayed in the search results, I need to customize the search results output.
Do I need to write my own theme for that or is there a hook (or other way) to solve this in my plug-in code?
You could hook into get_the_content and get_the_excerpt filters and test with is_search() to see if you should alter the returned value or not.
Not tested, but this is the idea:
add_filter( 'get_the_excerpt', 'my_search_excerpt' );
add_filter( 'get_the_content', 'my_search_excerpt' );
function my_search_excerpt( $content ) {
if ( is_search() ) {
$content = 'This is a search excerpt for ' . get_the_title();
// maybe add a read more link
// also, you can use global $post to access the current search result
}
return $content;
}
I see four possibilities:
Create a new (child) theme
Override the search template using filters (template_include)
Use client-side code to modify the appearance (CSS / JavaScript, poor workaround)
Hook the_content or the_excerpt
The easiest way might be to copy the search.php file of your installed theme and modify it to fulfill your needs. You can then hook it in using the first or second way. The first requires you to create a child theme, the second to create a plugin. The latter might be more complex so I would suggest to create a theme (take a look at template files of child themes for an explanation).

wordpress do_action after loop

i am working on a wordpress(3.3.1) site with a buddypress plugin. i am new to wordpress and i have some knowledge gaps when it comes to hook actions, but i have been programming in php for several years.
my question comes in reference to adding some of my logic after a wordpress/buddypress loop. in particular, i would like to add my logic at this point in a call:
<?php do_action( 'bp_after_profile_edit_content' ); ?>
as i said, my understanding is limited, because i thought i could just add a function in the functions.php file with the name "bp_after_profile_edit_content" that could just echo whatever i wanted. i have found out that is not the case.
thus, i would like to ask for some clarification on the topic. maybe a useful link. i am still trying to understand the codex as far as wp actions go.
I noticed You've figured it out, but i'll answer it in case someone else finds this in the future with a similar issue. :)
function stackoverflow_example_action() { //unique function name
echo 'This text will echo'; //something to do.
} //lets end the function...
add_action( 'bp_after_profile_edit_content', 'stackoverflow_example_action' ); //now we need to add_action so that WordPress knows where to add it.
That will echo the text when 'bp_after_profile_edit_content' is being done.
Add Action: http://codex.wordpress.org/Function_Reference/add_action

Wordpress widget/plugin - content based on text of post(s)/page(s) visible?

I'm new to the Wordpress plugin and widget APIs, but I'm sure this is possible.
I'd like to make a plugin or widget that would create links to other posts or external sites based on certain keywords/tags in the content of the given page/post.
Is this possible?
For example, if a term is in all-caps, link to the Wiktionary definition; inside a <news>..</news> pair, go to Google's news search; etc.
This is definitely possible. Don't bother looking into the widget api for this. Look at the filter api. WordPress has an api that allows you to filter content before it's sent to the browser. In this case, you'd do something like this:
function my_super_awesome_content_filterer( $content ){
$content = preg_replace( '#([A-Z]+)#', '$1', $content );
}
add_filter( 'the_content', 'my_super_awesome_content_filterer' );
Read more about filters here:
http://codex.wordpress.org/Plugin_API#Filters

categories in Wordpress sidebar.php

the sidebar.php shows
<li>
<?php wp_list_categories('show_count=1&title_li=<h2>Categories</h2>'); ?>
</li>
so which php file generates the Categories in the sidebar (wrapped in a tags and with number of posts)?
If you're trying to change the output of this function, you can do it with a custom theme filter. Add the following to your theme's functions.php:
function custom_wp_list_categories($categories){
// do something to the $categories returned by wp_list_categories()
return $categories;
}
add_filter('wp_list_categories', 'custom_wp_list_categories');
The benefit of this approach is that it means that if you upgrade WordPress, you don't have to worry about making your changes again to the core files.
The function is located inside wp-includes/category-template.php
You can find out where any function is located by looking at the WordPress codex - at the bottom of each page, there is a link to where the function located.
Documentation for wp_list_categores
wp_list_categories function source code
Why edit the core when there are so many options to choose from!
http://codex.wordpress.org/Template_Tags/wp_list_categories

Resources