2016-04-09 10 views
0

Ich habe mein eigenes Plugin, das bei der Aktivierung einige Rewrite-Regeln hinzufügt, die URLs auf Single-Page-Anwendungen abbilden.wordpress: Erkennen von Rewrite-Regeln flush

Jetzt verliere ich die Regeln hin und wieder, nach einigen anderen Plugin-Updates oder einem anderen Prozess, der flush_rewrite_rules in Wordpress auslöst.

Das Problem ist, ich weiß nicht wann, wie oder warum es passiert. Und von wem.

So habe ich weltweit in meiner WP Dateien und kommen mit den folgenden Aktionen gesucht, die eine Aktualisierung

add_action('woocommerce_settings_saved', array($this, 'load')); add_action('woocommerce_attribute_added', array($this, 'load')); add_action('woocommerce_attribute_updated', array($this, 'load')); add_action('woocommerce_attribute_deleted', array($this, 'load')); add_action('wp_install', array($this, 'load')); add_action('after_db_upgrade', array($this, 'load')); add_action('after_switch_theme', array($this, 'load'));

Wenn eine dieser Aktionen auslösen ausgelöst werden, ich meine Regeln neu zu laden. Das funktioniert, wenn einer dieser Auslöser. Also wahrscheinlich, löst manchmal eine andere aus, die ich nicht finden kann. Oder die Spülung passiert, nachdem die Aktion ausgelöst wird, wodurch meine Ladung unbrauchbar wird.

Also, gibt es eine bessere Möglichkeit, in einen Flush zu haken, so dass ich dort meine eigenen Regeln automatisch hinzufügen kann? Jetzt finden wir es ein paar Tage später heraus, wenn sich jemand beschwert, dass die App nicht funktioniert und ich die Regeln erneut laden muss.

Alle Vorschläge sind willkommen.

Cheers

Antwort

1

Ich kann ein paar Optionen sehen; die Symptome beheben oder die Ursache aufspüren.

die Symptome Fixing

Am Ende der WP_Rewrite::rewrite_rules() Funktion ist ein Filter rewrite_rules_array:

$this->rules = apply_filters('rewrite_rules_array', $this->rules); 

Sie könnten in die Haken und Ihre Regeln machen gibt es (das Hinzufügen ihnen, wenn sie don‘ t existieren). Haken Sie es mit einer hohen Zahl für das Argument $priority an, falls die Regeln mit demselben Hook entfernt werden.

hinunter die Ursache Alternativ

Verfolgung, könnten Sie die flush_rewrite_rules Funktion selbst ändern (das ist der Einstiegspunkt für die Schelm Änderungen unter der Annahme, dass Ihre Regeln zu löschen), und haben es Ihnen einen Stack-Trace einer E-Mail, wenn es namens. Es könnte Ihnen helfen, die Ursache zu finden. So etwas wie (vollständig ungetestet):

function flush_rewrite_rules($hard = true) { 
    global $wp_rewrite; 

    $e = new Exception(); 
    wp_mail ('[email protected]', 'flush_rewrite_rules called', $e->getTraceAsString()); 

    $wp_rewrite->flush_rules($hard); 
} 

Offensichtlich diese Änderung ist nur vorübergehend, bis Sie einen Vorsprung auf dem Problem haben - ich würde nie Kern-Code permanent befürworten ändern.

Wenn das nicht funktioniert, müssen Sie es möglicherweise tiefer in $wp_rewrite einfügen, wie die generate_rewrite_rules Funktion.

+0

Ich denke, ich werde beide Ihre Antworten kombinieren: Fügen Sie meine Regeln hinzu, wenn sie nicht von meinem eigenen Plugin (also kein Core Hacking). Und schreibe etwas in mein debug.log, wenn der Flush passiert. Auf diese Weise kann ich es aufspüren und hoffentlich ein für allemal nageln. – Mattijs