wake-up-neo.net

Was ist eine Alternative zu get_page_by_title ()?

Ich programmiere ein Thema, in dem Informationen in der Fußzeile angezeigt werden sollen, die nur auf einer Vorlagenseite verfügbar sind. Ich habe get_page_by_title() verwendet, was gut funktioniert, wenn Sie wissen, wie die Seite aufgerufen wird, aber meiner Meinung nach ist es nicht sehr dynamisch, und es ist unmöglich vorherzusagen, wie ein Benutzer eine Seite in Ihrem Thema benennt.

In meiner Recherche habe ich eine Funktion namens get_all_page_ids() gefunden, die ein numerisch indiziertes Array von IDs von der Site zurückgibt. Diese Funktion wäre viel cooler, wenn es ein assoziatives (oder sogar ein Post-Objekt) wäre, aber ich schweife ab.

Ich habe darüber nachgedacht, so etwas zu verwenden:

$all_page_ids = get_all_page_ids();

foreach ($all_page_ids as $id) {
    // get_post() {@link https://developer.wordpress.org/reference/functions/get_post/}
    $post_object = get_post($id);

    // preg_match() {@link http://php.net/manual/en/function.preg-match.php}
    if(preg_match("/\b(contact)\b/i", $post_object->post_title)) {
        // do something here
    } else {
        // for readability
        continue;
    }
}

Dies führt jedoch immer noch zu dem Problem, dass der Benutzer wissen muss, dass der Word-Kontakt in seinem Titel enthalten ist. Was passiert, wenn sie eine Seite namens "Get in Touch" erstellt haben, die ihre Kontaktseite ist? Das würde brechen.

Kurz gesagt, meine Frage dreht sich um Best Practices für Themendesigner. Ist get_page_by_title() die beste Möglichkeit, die ID einer anderen Seite abzurufen, oder gibt es eine Möglichkeit, einige Funktionen/Variablen zu kombinieren, um die ID einer anderen Seite abzurufen, ohne den Titel zu kennen?

Oder gibt es WordPress-Funktionen, die diese Art von schwerem Heben ausführen, oder ist get_page_by_title() die einzige enge? Mein Verdacht ist, dass es einen hackeren Weg gibt, aber besser, ich habe einfach keine Ideen. Vielen Dank für jede Hilfe, die Sie dazu geben können.

5
mrClean

Wenn Sie keinen Titel erzwingen und die ID offensichtlich nicht kennen, können Sie dies nur tun, indem Sie den Benutzer auswählen lassen, welche Seite verwendet werden soll. Dies erfolgt normalerweise auf der Optionsseite des Themas, kann jedoch im Costumizer durchgeführt werden oder sogar als Teil der Seitenbearbeitung

6
Mark Kaplun

Wenn Ihre Seite eine Vorlagenseite ist, können Sie is_page_template($template_name) verwenden.

Andernfalls müssen Sie, wie von Mark erwähnt, eine Designoption erstellen und den Benutzer entscheiden lassen.

Mehr: https://codex.wordpress.org/Function_Reference/is_page_template

UPDATE

Ich habe deine Frage falsch verstanden. Sie können alle Seiten mit einem bestimmten Vorlagennamen abrufen, aber auch hier kann ein Benutzer mehr als eine solche Seite mit derselben Vorlage erstellen, sodass Sie sich nicht sicher sind, welche Sie auswählen sollen.

 $args = array(
    'meta_key'         => '_wp_page_template',
    'meta_value'       => 'page-about.php',
    'post_type'        => 'page'
 );
 $posts_array = get_posts( $args );

Eine andere Idee ist, sich Ihre Seite mit Code bei der Aktivierung des Themas/Plugins zu erstellen und dann die ID als Option zu speichern, aber dem Benutzer auch eine Theme-Option bereitzustellen, um die Seite zu ändern, wenn er/sie dies wünscht. So funktioniert WooCommerce mit der Shop-Seite.

Wieder glaube ich, dass Marks Ansatz besser und sicherer ist.

3
Laxmana