Wordpress-Suchergebnisse basierend auf BenutzerrollenbeschränkungenPhp

PHP-Programmierer chatten hier
Anonymous
 Wordpress-Suchergebnisse basierend auf Benutzerrollenbeschränkungen

Post by Anonymous »

Ich erstelle eine Wissensdatenbank für ein Unternehmen mit mehreren B2B-Marken. Für jede einzelne Marke muss ein Kunde einen Vertrag mit dem Unternehmen unterzeichnen. Kunden können sich in die Wissensdatenbank einloggen und Inhalte für die Marken sehen, für die sie sich angemeldet haben.
Ich erstelle diese Wissensdatenbank in WordPress mit Elementor. Um Inhalte einzuschränken, verwende ich das Plugin „Content Control“ von Code Atlantic. Ich verwende auch das Plugin „Benutzerrollen-Editor“, um Benutzerrollen pro Marke zu erstellen.
Ich habe einen benutzerdefinierten Beitragstyp erstellt, der es Mitarbeitern des Unternehmens ermöglicht, Wissensdatenbankartikel zu schreiben. Diese benutzerdefinierten Beitragstypen basieren auf Kategorien.
Jetzt funktioniert alles einwandfrei, wenn jemand auf der Startseite landet. Immer wenn sie auf eine bestimmte Marke klicken, sind sie nicht für den Inhalt angemeldet.
Das Problem, das ich habe, ist die Suchergebnisseite. Ich habe mit Elementor eine Suchergebnisseite erstellt. Dort gibt es ein Schleifen-Widget, das relevante Wissensdatenbankartikel basierend auf der Suchanfrage anzeigt. Ich möchte jedoch nicht, dass Markenartikel auf dieser Ergebnisseite angezeigt werden, wenn der angemeldete Benutzer nicht bei einer bestimmten Marke registriert ist. Wenn sich Kunde A für Marke A registriert hat, sollte er nur Artikel von Marke A und nicht von Marke B sehen.
In die Funktionen PHP.file habe ich diesen Code eingefügt:

Code: Select all

add_filter('pre_get_posts', 'custom_search_query');

function custom_search_query($query) {
if (is_search() && $query->is_main_query()) {
$user = wp_get_current_user();
$roles = (array)$user->roles;
$allowed_roles = array('cenzaa_klanten', 'mayee_klanten');
$search_categories = array();

// Define the allowed categories for each role
if (in_array('cenzaa_klanten', $roles)) {
$search_categories = array(
'cenzaa-behandelformulieren',
'cenzaa-marketing-en-promotiemateriaal',
'cenzaa-prijslijsten',
'cenzaa-producthandleidingen',
'cenzaa-trainingen'
);
} elseif (in_array('mayee_klanten', $roles)) {
$search_categories = array(
'mayee-behandelformulieren',
'mayee-prijslijsten',
'mayee-trainingen'
);
}

// Set the post type and category parameters for the query
$query->set('post_type', 'artikel');
$query->set('rubriek_name', implode(',', $search_categories)); // Allow only selected categories
}

return $query;
}
Einige weitere Informationen:
'cenzaa_klanten' und 'mayee_klanten' sind die Benutzerrollen, die ich erstellt habe. Cenzaa ist eine der Marken und Mayee ist eine der Marken. Das Plugin „Content Control“ von Code Atlantic wird verwendet, um Regeln für eingeschränkte Inhalte festzulegen.
Die verschiedenen Kategorien beginnen mit „cenza-..“ und mit „mayee-..“
Mit ACF habe ich „Kategorie“ in „Rubriek“ geändert (die niederländische Übersetzung der Kategorie sieht in der URL besser aus).

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post