Risoluzione problema add_filter non funzionante in WordPress

6 apr 2015, 17:05:21
Visualizzazioni: 15.2K
Voti: 1

Ho un plugin WordPress dove ho incluso questo codice (con alcune modifiche)

$fep_files = array(
    'first' => 'first.php',
    'second' => 'second.php'
);

$fep_files = apply_filters('include_files', $fep_files );

foreach ( $fep_files as $fep_file )
require_once ( $fep_file );
unset ( $fep_files );

Ora ho aggiunto nel functions.php del mio tema

function fep_remove ( $fep_files )
{
    if ( isset ( $fep_files['first'] ) ) {
        unset ( $fep_files['first'] );
            }
        //die($fep_files); //per verificare se viene eseguito
    return $fep_files;
}

add_filter( 'include_files', 'fep_remove' );

Dovrebbe rimuovere first.php ma non lo fa. Ho sbagliato qualcosa, ma cosa? Esiste un modo migliore per includere file dove l'utente può includere/escludere qualsiasi file se necessario?

6
Commenti

Sei sicuro che il codice del plugin venga eseguito dopo il caricamento del tema?

fuxia fuxia
6 apr 2015 17:08:26

Come esserne certi? Esiste un modo migliore per includere file dove l'utente possa includere/escludere i file necessari (utilizzando hook)?

Shamim Hasan Shamim Hasan
6 apr 2015 17:18:10

Suggerirei di iniziare assicurandoti che non ci siano collisioni di namespace. Chiama il tuo hook qualcosa come 'myplugin_include_files' (dove "myplugin" rappresenta il tuo plugin). Dare un nome troppo generico all'hook potrebbe causare conflitti.

butlerblog butlerblog
6 apr 2015 17:40:25

Il tuo codice funziona quando lo testo. Questo renderà difficile individuare dove si trova il tuo problema specifico. Dovrei sottolineare che richiedere hard coding in un tema per far funzionare un plugin è una pratica piuttosto sconsigliata.

s_ha_dum s_ha_dum
6 apr 2015 18:21:09

Nel codice reale di un plugin, gli hook non sono troppo semplici.

Shamim Hasan Shamim Hasan
6 apr 2015 19:40:18

come hai testato @s_ha_dum ? il primo codice (che include apply_filters) è nel mio plugin (file principale che include le informazioni del plugin) così posso includere altri file necessari per quel plugin. Ho anche aggiunto apply_filters in modo che chiunque possa includere/escludere qualsiasi file senza modificare il codice core del plugin. Ora, se qualcuno vuole escludere first.php da quel codice, può aggiungere il codice (nella mia domanda che ha add_filter) nel file function.php del suo tema. Quanto è negativo questo?

Shamim Hasan Shamim Hasan
6 apr 2015 19:50:41
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 3
1

Penso che alcune risposte qui presenti debbano essere aggiornate. (Solo per quando io, o altri, visiteremo questa pagina in futuro alla ricerca di una risposta).

L'ordine dei plugin sembra dipendere dal tipo di installazione di Wordpress con cui si sta lavorando. Se si sta lavorando con un'installazione Multisite, i plugin vengono effettivamente processati nell'ordine in cui vengono attivati.

Tuttavia, in un'installazione singola di WordPress, vengono attivati in ordine alfabetico. Quindi, se si incontra un problema in cui è necessario aggiornare un filtro di inizializzazione o un'azione per un altro plugin, la soluzione migliore è nominare il proprio plugin con un nome che inizi con un underscore.

Ad esempio: _my_custom_plugin/my_custom_plugin.php

Per riferimento, si veda le righe 704-713 in wp-admin/includes/plugin.php

21 dic 2020 11:05:34
Commenti

Mmh, penso che dovresti affidarti a un hook, ad esempio un gestore plugins_loaded ad alta priorità, piuttosto che all'ordine alfabetico, ma questa è un'informazione utile - grazie

Rup Rup
21 dic 2020 12:02:45
1

Il codice del tuo plugin verrà eseguito prima del codice del tema e quindi verrà eseguito prima che qualsiasi cosa venga aggiunta all'hook. Dovrai spostare il codice che gestisce l'inclusione del file su un altro hook che viene eseguito dopo il caricamento di tutti i plugin, come after_setup_theme.

Questo potrebbe aiutarti: Esiste un diagramma di flusso per la sequenza di caricamento di WordPress?

7 apr 2015 02:48:46
Commenti

L'avevo già fatto e ora funziona perfettamente. Mi hai dato la stessa soluzione. Accetto anche la tua risposta.

Shamim Hasan Shamim Hasan
7 apr 2015 17:22:37
1
-1

La risposta precedente era ottima per quanto riguarda l'ordine, ma non sono riuscito a capire come far funzionare il filtro/hook con quelle istruzioni.

La mia soluzione è stata creare un plugin personalizzato contenente il filtro, assicurandomi che venga in ordine alfabetico prima del plugin che contiene il filtro che voglio modificare.

In altre parole, ho inserito il codice in plugings/a-custom-plugin.php iniziando il file con

<?php
/*
Plugin Name: My Custom Plugin
*/
26 gen 2016 04:12:49
Commenti

I plugin non vengono eseguiti in ordine alfabetico - vengono infatti eseguiti nell'ordine di attivazione, poiché quando un plugin viene attivato viene aggiunto all'array dei plugin attivi memorizzato nel database. ( wp_options -> active_plugins )

Bysander Bysander
19 mar 2020 13:46:56