Ich schreibe ein Plugin, das alle Beiträge moderiert, unabhängig davon, auf welcher Ebene der Benutzer sie gepostet hat. Der Inhalt und der Titel des Beitrags werden anhand einer Liste von Wörtern überprüft. Wenn sich Beiträge im Beitrag befinden, möchte ich den Beitrag in die Moderationswarteschlange stellen, als ob er von einem Mitwirkenden gepostet worden wäre. Dieser Teil funktioniert gut, aber ich möchte auch, dass Beiträge mit wirklich schlechten Worten automatisch gelöscht werden. So habe ich es derzeit:
function filter_handler( $data , $postarr ) {
// Get vars from data
$content = $data['post_content'];
$title = $data['post_title'];
// Array of words that will hold a post for aproval
$badWords = array(
"link=", "content-type", "bcc:", "cc:", "document.cookie",
"onclick", "onload", "javascript"
);
$reallyBadWords = array(
"query", "pluginTesting"
);
// If bad words exist in post, set post_status to pending
foreach ( $badWords as $word ) {
if (
strpos( strtolower( $content ), strtolower( $word ) ) ||
strpos( strtolower( $title ), strtolower( $word ) )
) {
$data['post_status'] = "pending";
}
}
// If really bad words exist, delete post
foreach ( $reallyBadWords as $word ) {
if (
strpos( strtolower( $content ), strtolower( $word ) ) ||
strpos( strtolower( $title ), strtolower( $word ) )
) {
$data['post_status'] = 'trash';
}
}
return $data;
}
add_filter( 'wp_insert_post_data', 'filter_handler', '99', 2 );
Dies funktioniert für die regulären Wörter, erfordert jedoch zwei wirklich schlechte Wörter, um einen Beitrag in den Papierkorb zu setzen. Wenn ein Benutzer mit dieser Methode einen Beitrag mit wirklich schlechten Wörtern veröffentlicht, wird er auf eine Fehlerseite weitergeleitet, auf der er darüber informiert wird, dass er keine Beiträge im Papierkorb bearbeiten darf.
Was wäre ein guter Weg, um dies zu beheben, damit Benutzer zurück zur Beitragsseite geschickt werden und eine Fehlermeldung angezeigt wird, die sie darüber informiert, dass ihr Beitrag gelöscht wurde?
Wie kann ich außerdem die Tatsache beheben, dass vor dem Löschen zwei wirklich schlechte Wörter erforderlich sind?
quelle
Antworten:
Dies ist eine teilweise Antwort, da ich, wie ich in meinem Kommentar erwähnt habe, nicht sicher bin, warum Ihr Code im Moment zwei "wirklich schlechte Wörter" erfordert. Es ist auch ein ungetesteter Versuch.
Ich werde mich mit Ihrer ersten Frage befassen: Wie kann ich einen Benutzer zurück zur Beitragsseite schicken und eine geeignete Fehlermeldung anzeigen, anstatt einen Fehler beim Bearbeiten von Beiträgen im Papierkorb .
Eine Möglichkeit, dies zu tun, ist die Verwendung von wp_redirect () mit einem benutzerdefinierten Querystring-Parameter, den Sie dann mit der Aktion admin_notices erkennen und Ihre Fehlermeldung anzeigen können .
Wir können jedoch nicht sofort umleiten, da wir den
wp_insert_post_data
Hook benötigen , um seine Arbeit zuerst abzuschließen. Wenn wir in die Quelle schauen , können wir möglicherweise am Ende derwp_insert_post()
Funktion in diesave_post
oderwp_insert_post
Aktionen umleiten . Wir brauchen auch eine Art und Weise zu diesem Zeitpunkt zu überprüfen , ob eine Umleitung notwendig ist - was können wir wahrscheinlich durch Überprüfen sicher tun , wenn daspost_status
ist ,'trash'
und wenn es eine ist neue Post (denn wenn sonst würde ein neuer Beitrag in den Papierkorb gehen?) .Hier ist ein möglicher Workflow:
Ich habe das wohlgemerkt nicht getestet, aber ich vertraue darauf, dass Sie damit etwas anfangen können!
Andere Optionen, die Sie sich ansehen sollten, könnten insbesondere die
wp_transition_post_status
Aktionen sein ,new_to_trash
die - wenn Sie sich die Quelle ansehen - auch in Ihrer Situation aufgerufen werden sollten.Wenn ich ein Benutzer wäre, möchte ich möglicherweise die Möglichkeit haben, meinen Beitrag zu bearbeiten, anstatt ihn automatisch in den Papierkorb zu werfen. Dies ist jedoch eine Entscheidung zur Benutzererfahrung von Ihrer Seite.
Haftungsausschluss: Dies ist möglicherweise nicht unbedingt der beste Weg, dies zu tun, aber ich hoffe, es gibt Ihnen dennoch eine Richtung, und vielleicht können andere mitmachen, wenn es einen besseren Weg gibt.
quelle