Sovrascrivere un plugin con functions.php

18 ago 2011, 14:20:50
Visualizzazioni: 25.1K
Voti: 1
add_action('wp_head','add_gpp_gallery');
function add_gpp_gallery() {
    if( ( is_single() || is_page() ) && ( !is_page_template('page-blog.php') ) ){
        remove_shortcode('gallery', 'gallery_shortcode');
        add_shortcode('gallery', 'gpp_gallery_shortcode');
    }
}

Ciao a tutti, ho estratto la funzione sopra dal file delle funzioni core del plugin, e speravo di modificarla per sostituire la galleria predefinita di WP solo sul mio custom post type. Quindi ho modificato l'istruzione if sopra in:

if (is_single() && is_post_type('post_type'){

Ho fatto questa modifica e l'ho inserita nel mio functions.php - ma sto ricevendo un errore che indica che non posso ridichiarare add_gpp_gallery

Come posso sovrascrivere le funzioni del plugin senza toccare il codice del plugin?

grazie

MODIFICA

Ho provato:

remove_action( 'wp_head', 'add_gpp_gallery' );
add_action('wp_head','jason_add_gpp_gallery');
function jason_add_gpp_gallery() {
    if ( is_single() && is_post_type('listings') ){
        remove_shortcode('gallery', 'gallery_shortcode');
        add_shortcode('gallery', 'gpp_gallery_shortcode');
    }
}

e ottengo un errore fatale -

Errore fatale: Chiamata a funzione non definita is_post_type() in /home/hostspro/public_html/movemaine.com/wp-content/themes/movemaine/functions.php alla riga 269

MODIFICA #2

Avevo incrociato le mie funzioni e mi ero dimenticato di cambiare is_post_type. Il seguente codice funziona e grazie per l'aiuto

remove_action( 'wp_head', 'add_gpp_gallery' );
add_action('wp_head','jason_add_gpp_gallery');
function jason_add_gpp_gallery() {
    if ( is_single() && 'listings' == get_post_type() ) {
        remove_shortcode('gallery', 'gallery_shortcode');
        add_shortcode('gallery', 'gpp_gallery_shortcode');
    }
}
1
Commenti

Puoi abbreviare la tua condizione da is_single() && 'listings' = get_post_type() a is_singular('listings'). L'errore fatale è dovuto al fatto che non esiste una funzione is_post_type.

chrisguitarguy chrisguitarguy
18 ago 2011 16:07:36
Tutte le risposte alla domanda 1
10

Puoi cambiare il nome della add_gpp_gallery funzione sia nel callback che nella dichiarazione per evitare il conflitto tra l'originale e il tuo clone.

Qualcosa come questo...

add_action('wp_head','jason_add_gpp_gallery');
function jason_add_gpp_gallery() {
    if ( is_single() && 'your_post_type' == get_post_type() ) ){
        remove_shortcode('gallery', 'gallery_shortcode');
        add_shortcode('gallery', 'gpp_gallery_shortcode');
    }
}

... dovrebbe funzionare per te.

Bonus: Puoi rimuovere l'azione originale del plugin con remove_action() se necessario.

18 ago 2011 15:00:55
Commenti

Nota che creare nomi di funzioni unici ogni volta che scrivi una funzione è considerata una pratica importante poiché previene esattamente i conflitti che stai riscontrando. Vedi Migliori Pratiche Oggettive per lo Sviluppo di Plugin

Michal Mau Michal Mau
18 ago 2011 15:05:30

Il "Bonus" è in realtà la risposta. Devi chiamare remove_action( 'wp_head', 'add_gpp_gallery' ), e poi chiamare il tuo codice personalizzato (con nomi di funzioni correttamente namespaced).

Chip Bennett Chip Bennett
18 ago 2011 15:06:20

@Chip Grazie per aver chiarito questo punto! Non c'è bisogno di mantenerli entrambi.

Michal Mau Michal Mau
18 ago 2011 15:10:16

Sfortunatamente - ricevo un errore - vedi modifica.

Jason Jason
18 ago 2011 15:17:19

@Jason questo è un errore che ho copiato-incollato dal tuo esempio ed è completamente irrilevante al problema risolto da questa risposta. Il problema è che non esiste una funzione is_post_type in WP. Dai un'occhiata a get_post_type()

Michal Mau Michal Mau
18 ago 2011 15:58:47

A giudicare dalle apparenze, il tuo file function.php viene eseguito prima che tutto il core di WP sia caricato, in particolare is_post_type()...

Dunhamzzz Dunhamzzz
18 ago 2011 16:09:19

@Dunhamzzz Stai scherzando, vero?

Michal Mau Michal Mau
18 ago 2011 16:40:27

Per quale altro motivo OP riceverebbe un errore di funzione non definita per una funzione che in effetti esiste?

Dunhamzzz Dunhamzzz
18 ago 2011 16:44:05

@Dunhamzzz Deprecato, vedi il commento di Chip Bennet sopra che rimanda alla domanda precedente dell'OP

Michal Mau Michal Mau
18 ago 2011 16:52:19
Mostra i restanti 5 commenti