自定义wordpress评论表单html

时间:2013-11-14 08:43:34

标签: php wordpress

我想修改WordPress中评论表单的实际HTML。我知道WordPress提供的comment_form()函数,但它实际上并没有让我修改表单的html。我特别想要做的是制作一个自举响应表单,这对于comment_form()函数提供的选项是不可能的。我试过在互联网上寻找一种方式,但无济于事。有人能指出我正确的方向吗?

让我澄清一下:

我希望修改实际的FORM并包含评论表单的DIV元素,而不仅仅是字段。

7 个答案:

答案 0 :(得分:10)

函数comment_form()的不可自定义部分应该(理想情况下)仅限于对WordPress核心的安全性和正确表单处理至关重要的代码。但事实并非如此。为了探索这个问题,我使用过滤器(可以使用参数)来完全删除所有可自定义的代码。我将所有可用变量设置为空字符串 - 即comment_form()的codex页面上提到的所有内容。

以下是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 -->

这一切来自哪里?在comment_form()的codex页面的底部,它说......

  

源代码

     

comment_form()位于 wp-includes / comment-template.php

comment-template.php已关联,您可以在浏览器中查看完整代码。 comment_form()从1960行开始。事实上,它是该文件中的最后一个函数。没有参数或过滤器可以让您修改上面的残留代码。这些代码行都是更加“硬编码”的。

文字点击此处取消回复。是我过滤种族灭绝中幸存的唯一文字。奇怪的是,comment_form()具有cancel_reply_link硬编码到函数中的备份文本,以防它作为空字符串传递给函数。其他可过滤的项目都没有硬编码备份。

很容易看出哪些代码是必不可少的,哪些位对于HTML表单来说不是必需的。更难以判断哪些位对于 WordPress 形式至关重要。上面的一些位是动态输出的(请注意,这是开发博客上的第一条评论,没有其他回复,没有父/子评论)。

comment_form()中的comment-template.php函数,您可以绘制出生成WordPress表单动态部分所需的代码。然后,使用从comment_form()的codex页面获取的默认参数,您可以拼凑一个准系统表单,硬编码所需的字段,标签和包装HTML。我现在正在这样做,并将我的自定义表单功能放在我的主题comments.php模板文件中,我只在comments_template()中使用single.php调用(针对此特定主题)。

结果将是一个完整,恰当,精益和平均的WordPress评论表单。但是......它将是一个无法使用comment_form()参数或相关过滤器进行自定义的表单,除非您继续将过滤器代码包含在您自己的注释表单函数中。既然你已经定制了它,那可能不是问题。同样,除非您还在自己的注释表单函数中触发了这些操作函数,否则所有WordPress操作也将对您或任何其他插件不可用。同样,此时可能不是您的问题。

但最重要的是,如果未来的WordPress更新改变了核心处理表单的方式,结果表单可能会破坏您的主题。

如果您意识到这些风险,您可以通过复制codex page for comment_form()wp-includes/comment-template.php中的代码重建手工编码的评论表单。我没有完成的代码,否则我会发布它。但是如果我成功的话,我会发布。

是的,现在这一切都来自我。请记住(所有读者),尽管出现,我是业余的WordPress主题开发人员,我对PHP和WordPress的熟练程度非常简陋。刚写完这篇文章我学到了很多东西。

我也担心某个地方已经有一个完整而正确的解决方案,但我没有在我的搜索中找到它。

答案 1 :(得分:1)

只需创建一个名为comment_form.php的新PHP文件,然后粘贴所有代码。你的评论表已准备就绪。

您不应该编辑wp-includes / comment-template.php文件。

请为您的参考保留此内容,以便为现有评论表单添加更多样式

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

或者这个

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

表单代码和操作

<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>

答案 2 :(得分:1)

WP不提供创建和使用评论表单模板的方法。即:从4.1.1开始,仍然无法控制构成表单的HTML标记的所有。只有通过向comment_form()提供参数来编辑部件的方法。

所以,如果你想编辑整个布局(例如:将一些内容放在一边而不是放在另一个上面;用<p>替换部分<div>),你运气不好

我们能做什么?

一个选项是借用WordPress代码库中的整个comment_form()函数(like this guy did):在主题中复制函数,重命名,自定义然后调用它香草功能如果WP的某些内部工作发生变化,那么它可能会在未来的WordPress更新中出现故障。

答案 3 :(得分:0)

您是否在Wordpress代码中查找comment_form()函数以查看是否可以编辑它?

您还可以在这里找到一些信息:

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

答案 4 :(得分:0)

此功能使用默认表格。您需要在主题中创建comment-template.php文件,并在该文件中创建表单。 现在,当您致电comments_template()时,您将获得自己的表格,而不是默认表格。

答案 5 :(得分:0)

我认为你不能改变包含div(<div id="respond" class="comment-respond">)。看看comment-template.php

您唯一可以更改的是表单ID。 'id_form' => 'commentform'

您可以在不更改这些元素的情况下制作响应表单。

答案 6 :(得分:-1)

我最近在WPSE上回答了类似的问题。您可以查看here