È possibile utilizzare add_filter da un tema per modificare una funzione di un plugin?

15 gen 2011, 22:45:58
Visualizzazioni: 271
Voti: 1

È possibile utilizzare add_filter() per intercettare una funzione di un plugin?

Non sto avendo successo, quindi penso che forse sto sbagliando qualcosa.

Il plugin è "All in One SEO" e la funzione che sto cercando di intercettare è nella classe All_in_One_SEO_Pack e si chiama get_original_title()

Ecco il codice che sto cercando di intercettare... in particolare, quando viene chiamato il metodo is_404()...

class All_in_One_SEO_Pack {

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

    $post = $wp_query->get_queried_object();

    // the_search_query() non è adatto, non può semplicemente restituire
    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()) {
        // non siamo nel 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()) {
        // non siamo nel loop :(
        $authordata = get_userdata($post->post_author);
        if ($this->is_static_front_page()) {
            if ($this->internationalize($aioseop_options['aiosp_home_title'])) {

                        //filtro titolo home
                        $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()) { // supporto 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;

}}
0
Tutte le risposte alla domanda 2
2

Lo è, ma lo stai facendo nel modo sbagliato. Non ho familiarità con quel plugin, ma è probabile che si agganci all'hook wp_title. Dovresti essere in grado di a) chiamare remove_filter() dal tuo tema per disabilitare la manipolazione del titolo da parte del plugin, e/o b) sovrascrivere il risultato restituito dal plugin agganciandoti allo stesso hook (assicurati solo che la tua "priorità" sia "più alta", cioè che la tua funzione venga chiamata dopo).

16 gen 2011 00:22:02
Commenti

posso prendere di mira specificamente la funzione is_404() e rimuoverla o modificarla? add_filter('is_404', 'myfunction', 1,0) ovviamente non funziona, ma è possibile con il filtro o l'azione giusta?

Scott B Scott B
16 gen 2011 01:04:48

Essendo WP, gli hook non sono necessariamente nominati in base alla loro funzione o classe/metodo correlati, e non necessariamente con priorità 10 (quella predefinita)... Molti lo sono, ma molti altri no.

Denis de Bernardy Denis de Bernardy
16 gen 2011 02:15:21
2

Il filtro non intercetta la funzione, si limita a collegarsi a un hook esistente. Non ci sono hook da utilizzare in quel metodo.

16 gen 2011 00:32:40
Commenti

Non ero sicuro quindi ho provato prima quella strada. Ho inserito il codice nella domanda. Sto cercando di intercettare il ramo is_404() in modo che il plugin non modifichi il titolo della mia pagina in quel caso.

Scott B Scott B
16 gen 2011 00:45:18

Quindi non c'è modo di farlo?

Scott B Scott B
19 gen 2011 19:23:06