Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

Can add_filter() be used to intercept a plugin function?

I'm not having any success, so I'm thinking perhaps I'm doing this wrong.

The plugin is "All in One SEO" and the function I'm trying to intercept is in the All_in_One_SEO_Pack class and its called get_original_title()

Here's the code I'm trying to intercept...specifically, when the is_404() method is called...

class All_in_One_SEO_Pack {

function rewrite_title($header) {
    global $aioseop_options;
    global $wp_query;
    if (!$wp_query) {
        $header .= "<!-- no wp_query found! -->\n";
        return $header; 
    }

    $post = $wp_query->get_queried_object();

    // the_search_query() is not suitable, it cannot just return
    global $s;

    global $STagging;

    if (is_home() && !$this->is_static_posts_page()) {
        $title = $this->internationalize($aioseop_options['aiosp_home_title']);
        if (empty($title)) {
            $title = $this->internationalize(get_option('blogname'));
        }
        $title = $this->paged_title($title);
        $header = $this->replace_title($header, $title);
    } else if (is_attachment()) { 
                        $title = get_the_title($post->post_parent).' '.$post->post_title.' – '.get_option('blogname');
                        $header = $this->replace_title($header,$title);
    } else if (is_single()) {
        // we're not in the loop :(
        $authordata = get_userdata($post->post_author);
        $categories = get_the_category();
        $category = '';
        if (count($categories) > 0) {
            $category = $categories[0]->cat_name;
        }
        $title = $this->internationalize(get_post_meta($post->ID, "_aioseop_title", true));
        if (!$title) {
            $title = $this->internationalize(get_post_meta($post->ID, "title_tag", true));
            if (!$title) {
                $title = $this->internationalize(wp_title('', false));
            }
        }
        $title_format = $aioseop_options['aiosp_post_title_format'];
        /*
        $new_title = str_replace('%blog_title%', $this->internationalize(get_bloginfo('name')), $title_format);
        $new_title = str_replace('%blog_description%', $this->internationalize(get_bloginfo('description')), $new_title);
        $new_title = str_replace('%post_title%', $title, $new_title);
        $new_title = str_replace('%category%', $category, $new_title);
        $new_title = str_replace('%category_title%', $category, $new_title);
        $new_title = str_replace('%post_author_login%', $authordata->user_login, $new_title);
        $new_title = str_replace('%post_author_nicename%', $authordata->user_nicename, $new_title);
        $new_title = str_replace('%post_author_firstname%', ucwords($authordata->first_name), $new_title);
        $new_title = str_replace('%post_author_lastname%', ucwords($authordata->last_name), $new_title);
        */
        $r_title = array('%blog_title%','%blog_description%','%post_title%','%category%','%category_title%','%post_author_login%','%post_author_nicename%','%post_author_firstname%','%post_author_lastname%');
        $d_title = array($this->internationalize(get_bloginfo('name')),$this->internationalize(get_bloginfo('description')),$title, $category, $category, $authordata->user_login, $authordata->user_nicename, ucwords($authordata->first_name), ucwords($authordata->last_name));
        $title = trim(str_replace($r_title, $d_title, $title_format));

//      $title = $new_title;
//      $title = trim($title);
        $title = apply_filters('aioseop_title_single',$title);
        $header = $this->replace_title($header, $title);
    } else if (is_search() && isset($s) && !empty($s)) {
        if (function_exists('attribute_escape')) {
            $search = attribute_escape(stripcslashes($s));
        } else {
            $search = wp_specialchars(stripcslashes($s), true);
        }
        $search = $this->capitalize($search);
        $title_format = $aioseop_options['aiosp_search_title_format'];
        $title = str_replace('%blog_title%', $this->internationalize(get_bloginfo('name')), $title_format);
        $title = str_replace('%blog_description%', $this->internationalize(get_bloginfo('description')), $title);
        $title = str_replace('%search%', $search, $title);
        $header = $this->replace_title($header, $title);
    } else if (is_category() && !is_feed()) {
        $category_description = $this->internationalize(category_description());
            if($aioseop_options['aiosp_cap_cats']){
                $category_name = ucwords($this->internationalize(single_cat_title('', false)));
            }else{
                    $category_name = $this->internationalize(single_cat_title('', false));
            }           
        //$category_name = ucwords($this->internationalize(single_cat_title('', false)));
        $title_format = $aioseop_options['aiosp_category_title_format'];
        $title = str_replace('%category_title%', $category_name, $title_format);
        $title = str_replace('%category_description%', $category_description, $title);
        $title = str_replace('%blog_title%', $this->internationalize(get_bloginfo('name')), $title);
        $title = str_replace('%blog_description%', $this->internationalize(get_bloginfo('description')), $title);
        $title = $this->paged_title($title);
        $header = $this->replace_title($header, $title);
    } else if (is_page() || $this->is_static_posts_page()) {
        // we're not in the loop :(
        $authordata = get_userdata($post->post_author);
        if ($this->is_static_front_page()) {
            if ($this->internationalize($aioseop_options['aiosp_home_title'])) {

                        //home title filter
                        $home_title = $this->internationalize($aioseop_options['aiosp_home_title']);
                        $home_title = apply_filters('aioseop_home_page_title',$home_title);
                        $header = $this->replace_title($header, $home_title);

            }
        } else {
            $title = $this->internationalize(get_post_meta($post->ID, "_aioseop_title", true));
            if (!$title) {
                $title = $this->internationalize(wp_title('', false));
            }
            $title_format = $aioseop_options['aiosp_page_title_format'];
            $new_title = str_replace('%blog_title%', $this->internationalize(get_bloginfo('name')), $title_format);
            $new_title = str_replace('%blog_description%', $this->internationalize(get_bloginfo('description')), $new_title);
            $new_title = str_replace('%page_title%', $title, $new_title);
            $new_title = str_replace('%page_author_login%', $authordata->user_login, $new_title);
            $new_title = str_replace('%page_author_nicename%', $authordata->user_nicename, $new_title);
            $new_title = str_replace('%page_author_firstname%', ucwords($authordata->first_name), $new_title);
            $new_title = str_replace('%page_author_lastname%', ucwords($authordata->last_name), $new_title);
            $title = trim($new_title);
                            $title = $this->paged_title($title);
            $title = apply_filters('aioseop_title_page',$title);
            $header = $this->replace_title($header, $title);
        }
    } else if (function_exists('is_tag') && is_tag()) {
        global $utw;
        if ($utw) {
            $tags = $utw->GetCurrentTagSet();
            $tag = $tags[0]->tag;
            $tag = str_replace('-', ' ', $tag);
        } else {
            // wordpress > 2.3
            $tag = $this->internationalize(wp_title('', false));
        }
        if ($tag) {
            $tag = $this->capitalize($tag);
            $title_format = $aioseop_options['aiosp_tag_title_format'];
            $title = str_replace('%blog_title%', $this->internationalize(get_bloginfo('name')), $title_format);
            $title = str_replace('%blog_description%', $this->internationalize(get_bloginfo('description')), $title);
            $title = str_replace('%tag%', $tag, $title);
            $title = $this->paged_title($title);
            $header = $this->replace_title($header, $title);
        }
    } else if (isset($STagging) && $STagging->is_tag_view()) { // simple tagging support
        $tag = $STagging->search_tag;
        if ($tag) {
            $tag = $this->capitalize($tag);
            $title_format = $aioseop_options['aiosp_tag_title_format'];
            $title = str_replace('%blog_title%', $this->internationalize(get_bloginfo('name')), $title_format);
            $title = str_replace('%blog_description%', $this->internationalize(get_bloginfo('description')), $title);
            $title = str_replace('%tag%', $tag, $title);
            $title = $this->paged_title($title);
            $header = $this->replace_title($header, $title);
        }
    } else if (is_archive()) {
        $date = $this->internationalize(wp_title('', false));
        $title_format = $aioseop_options['aiosp_archive_title_format'];
        $new_title = str_replace('%blog_title%', $this->internationalize(get_bloginfo('name')), $title_format);
        $new_title = str_replace('%blog_description%', $this->internationalize(get_bloginfo('description')), $new_title);
        $new_title = str_replace('%date%', $date, $new_title);
        $title = trim($new_title);
        $title = $this->paged_title($title);
        $header = $this->replace_title($header, $title);
    } else if (is_404()) {
        $title_format = $aioseop_options['aiosp_404_title_format'];
        $new_title = str_replace('%blog_title%', $this->internationalize(get_bloginfo('name')), $title_format);
        $new_title = str_replace('%blog_description%', $this->internationalize(get_bloginfo('description')), $new_title);
        $new_title = str_replace('%request_url%', $_SERVER['REQUEST_URI'], $new_title);
        $new_title = str_replace('%request_words%', $this->request_as_words($_SERVER['REQUEST_URI']), $new_title);
        $new_title = str_replace('%404_title%', $this->internationalize(wp_title('', false)), $new_title);
        $header = $this->replace_title($header, $new_title);
    }

    return $header;

}}
share|improve this question

2 Answers 2

up vote 2 down vote accepted

It is, but you're doing this wrong. I'm not familiar with that plugin, but chances are it's hooking into the wp_title hook. You should be able to a) call remove_filter() from your theme to disable the plugin's title manipulation, and/or b) override the result returned by the plugin by plugging into the same hook (just make sure your "priority" is "higher", i.e. your function gets called later).

share|improve this answer
    
can I target the is_404() function specifically and remove it or alter it? add_filter('is_404', 'myfunction', 1,0) obviously does not work, but is it possible with the right filter or action? –  Scott B Jan 15 '11 at 23:04
1  
This being WP, hooks are not necessarily named after their related function or class/method, and not necessarily on the 10 (default) priority either... Many are, but many others aren't. –  Denis de Bernardy Jan 16 '11 at 0:15

Filter doesn't intercept function, it merely plugs in existing hook. There are no hooks to use in that method.

share|improve this answer
    
I wasn't sure so I tried that route first. I've placed the code in the question. I'm trying to intercept the is_404() branch so that the plugin does not alter my page title in that case. –  Scott B Jan 15 '11 at 22:45
    
So no way to do this then? –  Scott B Jan 19 '11 at 17:23

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.