benutzerdefiniertes WordPress-Kommentarformular html

Lesezeit: 9 Minuten

Benutzer-Avatar
Lord Zardeck

Ich möchte den eigentlichen HTML-Code der Kommentarformulare in WordPress ändern. Ich kenne die comment_form() Funktion, die WordPress bietet, aber es lässt mich nicht wirklich den HTML-Code des Formulars ändern. Was ich speziell versuche, ist ein Bootstrap-Responsive-Formular zu erstellen, was mit den bereitgestellten Optionen nicht möglich ist comment_form() Funktion. Ich habe versucht, im ganzen Internet nach einer Möglichkeit zu suchen, aber ohne Erfolg. Kann mich jemand in die richtige Richtung weisen?

Lassen Sie mich das klarstellen:

Ich möchte das eigentliche FORM ändern und DIV-Elemente des Kommentarformulars enthalten, nicht nur die Felder.

  • Ohne ausführlich auf den Mangel an Trennung von Bedenken einzugehen, der WordPress im Allgemeinen plagt, möchte ich nur darauf hinweisen, dass das Erfassen der bestehenden Form mit ob_start()/ob_get_clean() und filtern Sie dann nach Anpassungen mit DOMDocument ist eine ziemlich praktikable Möglichkeit, die meisten rechthaberischen direkten HTML-Ausgaben in WordPress zu bearbeiten, insbesondere wenn Sie nicht besonders an der Spaghetti-Plage interessiert sind, die unmöglich zu recyceln ist, die der Loop ist.

    – mopsyd

    24. Mai 2018 um 17:52 Uhr

  • Benutz einfach ob_start(); comment_form(); $comment_form = ob_get_clean(); und Sie haben es als Zeichenfolge.

    – Jonas Lundmann

    13. Juni 2018 um 11:16 Uhr

Benutzer-Avatar
lukanicke

Die nicht anpassbaren Teile der Funktion comment_form() sollte (idealistischerweise) rein auf Code beschränkt sein, der für die Sicherheit und die ordnungsgemäße Verarbeitung von Formularen durch den WordPress-Kern unerlässlich ist. Dies ist jedoch nicht der Fall. Um das Problem zu untersuchen, habe ich Filter verwendet (hätte Argumente verwenden können), um den gesamten anpassbaren Code vollständig zu entfernen. Ich setze alle verfügbaren Variablen auf leere Strings – das heißt, all das Zeug, das auf der Codex-Seite für erwähnt wird comment_form().

Hier ist der übrig gebliebene, nicht anpassbare Code von comment_form():

<div id="respond" class="comment-respond">
    <h3 id="reply-title" class="comment-reply-title"> <small><a rel="nofollow" id="cancel-comment-reply-link" href="/1#respond" style="display:none;">Click here to cancel reply.</a></small></h3>
    <form action="http://www.[yourdomain].com/wp-comments-post.php" method="post" id="" class="comment-form">
        <p class="form-submit">
            <input name="submit" type="submit" id="" value="" />
            <input type="hidden" name="comment_post_ID" value="1" id='comment_post_ID' />
            <input type="hidden" name="comment_parent" id='comment_parent' value="0" />
        </p>
    </form>
</div><!-- #respond -->

Wo kommt das alles her? Unten auf der Codex-Seite für comment_form() es sagt…

Quellcode

comment_form() befindet sich in wp-includes/comment-template.php.

comment-template.php verlinkt und Sie können den vollständigen Code im Browser anzeigen. comment_form() beginnt in Zeile 1960. Tatsächlich ist es die letzte Funktion in dieser Datei. Es gibt keine Argumente oder Filter, mit denen Sie den obigen Restcode ändern können. Diese Codezeilen sind alle mehr oder weniger „fest codiert“.

Der Text Klicken Sie hier, um die Antwort abzubrechen. ist der einzige Text, der meinen Filter-Völkermord überlebt hat. Seltsam, comment_form() hat Back-up-Text für cancel_reply_link fest in die Funktion codiert, falls es als leerer String an die Funktion übergeben wird. Keines der anderen filterbaren Elemente verfügt über fest codierte Backups.

Es ist leicht zu erkennen, welche Bits des Codes für ein HTML-Formular wesentlich und welche nicht wesentlich sind. Etwas schwieriger zu beurteilen ist, welche Bits für a wesentlich sind WordPress bilden. Einige der obigen Bits wurden dynamisch ausgegeben (beachten Sie, dass dies der erste Kommentar in einem Entwicklungsblog ohne andere Antworten, ohne Eltern-/Kind-Kommentare ist).

Von dem comment_form() Funktion ein comment-template.php Sie können den Code zeichnen, der zum Erstellen der dynamischen Teile des WordPress-Formulars erforderlich ist. Dann mit Standardargumenten aus der Codex-Seite für comment_form(), könnten Sie ein Barebone-Formular zusammensetzen, indem Sie die gewünschten Felder und Beschriftungen fest codieren und HTML umschließen. Ich mache das jetzt und füge meine benutzerdefinierte Formularfunktion in meine Themen ein comments.php Template-Datei, die ich aufrufe using comments_template() nur im single.php (für dieses spezielle Thema).

Das Ergebnis wäre ein vollständiges und ordentliches, schlankes und gemeines WordPress-Kommentarformular. Aber… es wäre ein Formular, das nicht mehr angepasst werden könnte comment_form() Argumente oder verwandte Filter, es sei denn, Sie haben den Filtercode in Ihre eigene Kommentarformularfunktion eingefügt. Da Sie es bereits zum Teufel anpassen, ist das wahrscheinlich kein Problem. Ebenso wären alle WordPress-Aktionen für Sie oder andere Plugins nicht verfügbar, es sei denn, Sie haben diese Aktionsfunktionen auch in Ihrer eigenen Kommentarformularfunktion ausgelöst. Auch hier wahrscheinlich kein Problem für Sie an dieser Stelle.

Aber am wichtigsten ist, dass das resultierende Formular Ihr Design beschädigen könnte, wenn zukünftige WordPress-Updates die Art und Weise ändern, wie der Kern mit Formularen umgeht.

Wenn Sie sich dieser Risiken bewusst sind, können Sie wahrscheinlich ein handcodiertes Kommentarformular neu erstellen, indem Sie einfach Code auf die kopieren Codexseite für comment_form() und in wp-includes/comment-template.php. Ich habe den fertigen Code nicht, sonst würde ich ihn posten. Aber ich werde posten, wenn/wenn es mir gelingt.

So, das war’s erstmal von mir. Denken Sie daran (alle Leser), dass ich trotz des Anscheins ein Amateur-WordPress-Theme-Entwickler bin und meine Kenntnisse mit PHP und WordPress sehr rudimentär sind. Beim Schreiben dieses Beitrags habe ich viel gelernt.

Ich mache mir auch Sorgen, dass es irgendwo schon eine vollständige und richtige Lösung gibt, aber ich habe sie bei meinen Suchen nicht gefunden.

  • Wenn Sie weiterhin kommentarbezogene Plugins verwenden möchten, sollten Sie darüber nachdenken, diese hinzuzufügen do_action('comment_form_after_fields'); innerhalb der <form> Schild.

    – jave.web

    21. Juli 2017 um 16:58 Uhr

Benutzer-Avatar
Saschi

Erstellen Sie einfach eine neue PHP-Datei mit dem Namen comment_form.php und fügen Sie dann Ihren gesamten Code ein. Und Ihr Kommentarformular ist fertig.

du solltest die Datei wp-includes/comment-template.php nicht bearbeiten.

Bewahren Sie dies für Ihren Schiedsrichter auf, um Ihr vorhandenes Kommentarformular weiter zu gestalten

http://codex.wordpress.org/Template_Tags/comment_form

Oder dieses

http://wordpress.org/support/topic/where-to-find-the-comment_form-function-in-wp3

Formularcode und Aktion

<div class="comment-form">
            <h2 class="comments-wrapper-heading"> Leave a comment </h2>
            <form id="commentform" action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
              <div class="commentform-element">
                <label class="hide" for="author">Full Name</label>
                <input class="input-fields" id="author" name="author" type="text" placeholder="Full Name" value=""/>
              </div>
              <div class="commentform-element">
                <label class="hide" for="author">Email</label>
                <input class="input-fields" id="email" name="email" type="text" placeholder="Email" value=""/>
              </div>
              <div class="commentform-element">
                <label class="hide" for="comment">Message</label>
                <textarea id="comment" class="input-fields" placeholder="Message" name="comment" cols="40" rows="200"></textarea>
              </div>
              <input name="submit" class="form-submit-button"  type="submit" id="submit-comment" value="Post comment">
              <input type="hidden" name="comment_post_ID" value="22" id="comment_post_ID">
            <input type="hidden" name="comment_parent" id="comment_parent" value="0">
            </form>
 </div>

  • Aus Ihrer Antwort geht nicht hervor, wie benutzerdefinierte Formularfelder verwendet werden.

    – vsync

    15. April 2018 um 13:40 Uhr

  • eine comment_form.php-Datei wird nicht geladen comment_form()

    – Jeffrey von Grumbkow

    14. Juni 2018 um 11:36 Uhr

WP bietet keine Möglichkeit, eine zu erstellen und zu verwenden Kommentar bilden Schablone. dh: ab 4.1.1 gibt es immer noch keine Möglichkeit zur Kontrolle alle des HTML-Markups, aus dem das Formular besteht. Es gibt nur Bearbeitungsmöglichkeiten Teile davon und das ist durch die Bereitstellung von Argumenten comment_form().

Wenn Sie also das gesamte Layout bearbeiten möchten (z. B. einen Teil des Inhalts nebeneinander statt übereinander platzieren; einen Teil der <p>mit <div>), Du hast kein Glück mehr.

Was können wir tun?

Eine Option wäre, das Ganze zu leihen comment_form() Funktion aus der WordPress-Codebasis (wie dieser Typ es getan hat): Erstellen Sie eine Kopie der Funktion in Ihrem Design, benennen Sie sie um, passen Sie sie an und rufen Sie sie dann anstelle der Vanilla-Funktion auf. Das wird funktionieren, aber es besteht die Möglichkeit, dass es bei einem zukünftigen WordPress-Update kaputt geht, wenn sich einige der inneren Abläufe von WP ändern.

Haben Sie im WordPress-Code nach der Funktion comment_form() gesucht, um zu sehen, ob Sie sie bearbeiten können?

Einige Informationen finden Sie auch hier:

http://wordpress.org/support/topic/editing-the-comment-form

Diese Funktion verwendet das Standardformular. Sie müssen eine machen comment-template.php Datei in Ihrem Design und in dieser Datei können Sie Ihr Formular erstellen. Jetzt, wenn Sie anrufen comments_template() Sie erhalten Ihr erstelltes Formular anstelle des Standardformulars.

  • Ok, aber das hilft mir nicht mit dem Formular. Wie bekomme ich es hin, die Daten zu posten? Unter welcher URL poste ich? Welche Postfelder erwartet es? Wie gebe ich automatisch Benutzerdaten an, wenn ein Benutzer angemeldet ist?

    – Lord Zardeck

    14. November 2013 um 9:01 Uhr

  • Okay, suche in deinem Theme nach comments.php, ersetze dort comments_form() durch dein Formular. Ihre Formularaktion lautet “/wp-comments-post.php”.

    – Sankalp Mischra

    14. November 2013 um 9:12 Uhr

  • Wie lauten die Feldnamen? Was sind die Pflichtfelder? Wie gehen Sie mit eingeloggten und ausgeloggten Benutzern um? Nichts davon ist auf der WordPress-Seite dokumentiert, soweit ich das beurteilen kann.

    – Lord Zardeck

    14. November 2013 um 9:17 Uhr

Ich glaube nicht, dass Sie das enthaltende div ändern können (<div id="respond" class="comment-respond">). Schauen Sie sich die an Kommentar-Vorlage.php

Das einzige, was Sie ändern können, ist die Formular-ID. 'id_form' => 'commentform'

Sie können ein responsives Formular erstellen, ohne diese Elemente zu ändern.

  • Ok, aber das hilft mir nicht mit dem Formular. Wie bekomme ich es hin, die Daten zu posten? Unter welcher URL poste ich? Welche Postfelder erwartet es? Wie gebe ich automatisch Benutzerdaten an, wenn ein Benutzer angemeldet ist?

    – Lord Zardeck

    14. November 2013 um 9:01 Uhr

  • Okay, suche in deinem Theme nach comments.php, ersetze dort comments_form() durch dein Formular. Ihre Formularaktion lautet “/wp-comments-post.php”.

    – Sankalp Mischra

    14. November 2013 um 9:12 Uhr

  • Wie lauten die Feldnamen? Was sind die Pflichtfelder? Wie gehen Sie mit eingeloggten und ausgeloggten Benutzern um? Nichts davon ist auf der WordPress-Seite dokumentiert, soweit ich das beurteilen kann.

    – Lord Zardeck

    14. November 2013 um 9:17 Uhr

Benutzer-Avatar
Gemeinschaft

Ich habe kürzlich etwas Ähnliches auf WPSE beantwortet. Sie können gehen und es sich ansehen hier

1383180cookie-checkbenutzerdefiniertes WordPress-Kommentarformular html

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

Privacy policy