可以从主题中使用ADD_FILTER来改变插件的功能吗?

时间:2011-01-15 作者:Scott B

add\\u filter()可以用来拦截插件函数吗?

我没有取得任何成功,所以我想也许我做错了。

该插件是“All-in-One SEO”,我试图拦截的函数位于All\\u-in\\u One\\u SEO\\u Pack类中,其名为get\\u original\\u title()

这是我试图拦截的代码。。。具体来说,当调用is\\u 404()方法时。。。

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;

}}

2 个回复
最合适的回答,由SO网友:Denis de Bernardy 整理而成

是的,但你做错了。我对这个插件并不熟悉,但它很可能挂接到了wp\\u标题挂钩上。您应该能够a)从主题中调用remove\\u filter()以禁用插件的标题操作,和/或b)通过插入同一挂钩覆盖插件返回的结果(只需确保您的“优先级”为“更高”,即稍后调用您的函数)。

SO网友:Rarst

过滤器并没有拦截功能,它只是插入现有的钩子。该方法中没有可使用的挂钩。

结束

相关推荐