WordPress prüfen, ob Sie sich auf der aktuellen Seite befinden (nicht im Menü)

Lesezeit: 3 Minuten

Ich erstelle einen kleinen Shortcode, der sich wie das benutzerdefinierte Menü-Widget verhält, aber ich wähle die Seiten aus einer Dropdown-Liste aus, anstatt ein Menü in der WordPress zu erstellen (ich füge ihm auch eine Farbe hinzu, also kann ich das nicht Verwenden Sie einfach das reguläre WordPress-Menü-Widget).

So weit so gut, nur eine Sache stört mich. Ich möchte überprüfen, ob die Seite, auf der ich mich befinde, mit der in meiner Liste (auf der echten Seite) übereinstimmt. Ich habe ein bisschen gegoogelt und gesucht und das mit gefunden

$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

Ich kann die aktuelle Seite abrufen, auf der ich mich befinde (der Link, den ich in meinem Browser sehe). Perfekt!

Wenn ich also eine Klasse namens aktuelle Seite hinzufügen möchte, muss ich nur sehen, ob meine $actual_link stimmt mit meinem ausgewählten Link aus der Dropdown-Liste überein.

Ich arbeite daran in einem Page Bulder-Plugin The Creator, also weiß ich, wie man darin einen funktionierenden Shortcode erstellt. Das Dropdown-Menü „Meine Seiten“ wird erstellt, indem ein Array erstellt wird, das die Seiten-URL als Schlüssel und den Seitennamen als Wert enthält. Meine Schleife ist:

$args = array (
    'post_type' => 'page',
    'posts_per_page' => -1,
    'orderby' => 'menu_order',
    'order' => 'ASC',
);
$pages = get_posts($args);

$forms = array();
if(is_array($pages)){
    foreach ($pages as $page) {
        $forms[$page->url] = $page->post_title;
    }
}

Und es funktioniert perfekt. Abgesehen davon, dass die URL, die ich davon bekomme, die Form hat:

http://www.example.com/?page_id=150

Während ich meine Permalinks so eingestellt habe, dass sie nett sind, ist der tatsächliche Link in meinem Browser

http://www.example.com/my_page_name

Die ID ist korrekt, und wenn ich auf meinen „Menü“-Link klicke, komme ich zu dieser Seite (gewünschtes Ergebnis). Aber jetzt kann ich nicht einfach hingehen und sagen:

$current = ($actual_link == $link) ? 'current_page' : '';

wo $link ist die Variable, die den Link zu der Seite aus der Dropdown-Liste enthält, sodass ich dies an meine Liste anhängen kann, um zu überprüfen, ob ich mich auf der aktuellen Seite befinde (fügt eine current_page-Klasse hinzu). Ich brauche diese Klasse für Styling-Zwecke – wenn ich auf der Seite bin, die diesen Menü-Shortcode hat, bekomme ich neben dem Link, der zu dieser Seite passt, Chevron (>).

Meine Frage ist also, wie bekomme ich die passenden URLs, egal welche Permalink-Einstellung ich verwende? Gibt es eine Möglichkeit, dies in der get_posts() Abfrage oder mit der $_SERVER[] Variable?

Ich versuche, Javascript mit diesem zu vermeiden, und mache alles serverseitig.

Benutzer-Avatar
Khaliq

Sie müssen platzieren get_the_ID() Innerhalb get_permalink() Es wird der Link zurückgegeben, mit dem Sie übereinstimmen müssen $actual_link

$link = get_permalink(get_the_ID()); 

etwas wie das.

  • Habe das gerade geschrieben :DI habe es herausgefunden 😀

    – dingo_d

    2. August 2015 um 14:24 Uhr

Ok, Antwort gefunden.

Ich habe meine Abfrage auf geändert

$args = array (
    'post_type' => 'page',
    'posts_per_page' => -1,
    'orderby' => 'menu_order',
    'order' => 'ASC',
);
$pages = get_posts($args);

$forms = array();
if(is_array($pages)){
    foreach ($pages as $page) {
        $forms[$page->ID] = $page->post_title;
    }
}

Damit ich die Seiten-ID erhalten und dann verwenden kann

$link_out = get_permalink($link);

$current = ($actual_link == $link_out) ? 'current_page' : '';

Und es funktioniert! 😀

1063140cookie-checkWordPress prüfen, ob Sie sich auf der aktuellen Seite befinden (nicht im Menü)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy