É possível usar add_filter de um tema para alterar a function de um plugin?

O add_filter () pode ser usado para interceptar uma function de plugin?

Não estou tendo sucesso, então estou pensando que talvez eu esteja fazendo isso errado.

O plugin é “All in One SEO” ea function que estou tentando interceptar está na class All_in_One_SEO_Pack e é chamado get_original_title ()

Aqui está o código que estou tentando interceptar … especificamente, quando o método is_404 () é chamado …

class All_in_One_SEO_Pack { function rewrite_title($header) { global $aioseop_options; global $wp_query; if (!$wp_query) { $header .= "\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; }} 

Solutions Collecting From Web of "É possível usar add_filter de um tema para alterar a function de um plugin?"

É, mas você está fazendo isso errado. Eu não estou familiarizado com esse plugin, mas é provável que ele esteja entrando no gancho do wp_title. Você deve poder a) chamar remove_filter () do seu tema para desativar a manipulação do título do plugin e / ou b) replace o resultado retornado pelo plugin conectando-se ao mesmo gancho (apenas certifique-se de que sua “prioridade” seja “mais alta” “, ou seja, sua function é chamada mais tarde).

O filtro não intercepta a function, apenas se conecta no gancho existente. Não há ganchos para usar nesse método.