Sovrascrivere un plugin con functions.php
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');
}
}

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.

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

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 Grazie per aver chiarito questo punto! Non c'è bisogno di mantenerli entrambi.

Uhm, vedi la tua domanda precedente, dove chiedevi riguardo is_post_type()
?

@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()

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()
...

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