Можно ли использовать add_filter из темы для изменения функции плагина?
Можно ли использовать add_filter() для перехвата функции плагина?
У меня не получается, возможно, я делаю что-то неправильно.
Плагин - "All in One SEO", а функция, которую я пытаюсь перехватить, находится в классе All_in_One_SEO_Pack и называется get_original_title().
Вот код, который я пытаюсь перехватить... конкретно, когда вызывается метод is_404()...
class All_in_One_SEO_Pack {
function rewrite_title($header) {
global $aioseop_options;
global $wp_query;
if (!$wp_query) {
$header .= "<!-- wp_query не найден! -->\n";
return $header;
}
$post = $wp_query->get_queried_object();
// the_search_query() не подходит, он не может просто вернуть значение
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()) {
// мы не в цикле :(
$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()) {
// мы не в цикле :(
$authordata = get_userdata($post->post_author);
if ($this->is_static_front_page()) {
if ($this->internationalize($aioseop_options['aiosp_home_title'])) {
// фильтр заголовка главной страницы
$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
$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;
}}

Да, но вы делаете это неправильно. Я не знаком с этим плагином, но скорее всего он использует хук wp_title. Вы можете: а) использовать remove_filter() в своей теме, чтобы отключить манипуляции с заголовком плагина, и/или б) переопределить результат, возвращаемый плагином, подключившись к тому же хуку (просто убедитесь, что ваш "приоритет" "выше", то есть ваша функция вызывается позже).

Можно ли конкретно нацелиться на функцию is_404() и удалить или изменить её? add_filter('is_404', 'myfunction', 1,0) очевидно не работает, но возможно ли это с правильным фильтром или действием?
