我想在 WordPress 中修改评论表单的实际 HTML。我知道comment_form()
WordPress 提供的功能,但它实际上并没有让我修改表单的 html。我特别想做的是制作一个引导响应表单,这对于该comment_form()
函数提供的选项是不可能的。我已经尝试在互联网上寻找一种方法,但无济于事。谁能指出我正确的方向?
让我澄清一下:
我希望修改实际的 FORM 并包含评论表单的 DIV 元素,而不仅仅是字段。
该功能的不可定制部分comment_form()
(理想情况下)应仅限于对 WordPress 核心的安全性和正确表单处理至关重要的代码。然而,事实并非如此。为了探讨这个问题,我使用过滤器(可以使用参数)来完全删除所有可定制的代码。我将所有可用变量设置为空字符串,即comment_form()
.
这是剩余的、不可自定义的代码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()
它的法典页面底部说......</p>
源代码
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 表单的动态部分所需的代码。然后,使用从 codex 页面获取的默认参数comment_form()
,您可以拼凑出一个准系统表单,对所需的字段、标签和包装 HTML 进行硬编码。我现在正在这样做,并将我的自定义表单函数放在我的主题comments.php
模板文件中,我comments_template()
只在single.php
(对于这个特定的主题)中调用它。
结果将是一个完整、适当、精简和平均的 WordPress 评论表单。但是......这将是一个无法再使用comment_form()
参数或相关过滤器自定义的表单,除非您继续并将过滤器代码包含在您自己的评论表单函数中。由于您已经在自定义它,这可能不是问题。同样,您或任何其他插件也将无法使用所有 WordPress 操作,除非您还在自己的评论表单功能中触发了这些操作功能。同样,此时对您来说可能不是问题。
但最重要的是,如果未来的 WordPress 更新改变了核心处理表单的方式,生成的表单可能会破坏您的主题。
如果您意识到这些风险,您可以通过在wp-includes/comment-template.php的codex 页面comment_form()
上复制代码来重建手工编码的评论表单。我没有完成的代码,否则我会发布它。但是我会在/如果我成功时发布。
对,这就是我现在的全部。请记住(所有读者),尽管外表,我是一名业余 WordPress 主题开发人员,我对 PHP 和 WordPress 的熟练程度非常初级。刚刚写了这篇文章,我学到了很多。
我还担心某个地方已经有一个完整且适当的解决方案,但我在搜索中没有找到它。
WP 不提供创建和使用评论表单模板的方法。即:从 4.1.1 开始,仍然无法控制构成表单的所有HTML 标记。只有编辑方法它的一部分,那就是通过向comment_form()
.
因此,如果您想编辑整个布局(例如:将一些内容并排放置,而不是彼此重叠;替换一些<p>
)<div>
,那么您就不走运了。
我们能做什么?
comment_form()
一个选项是从 WordPress 代码库中借用整个函数(就像这个人所做的那样):在你的主题中复制函数,重命名它,自定义它,然后调用它来代替 vanilla 函数。这会起作用,但如果 WP 的某些内部工作发生变化,它可能会在未来的 WordPress 更新中中断。
只需创建一个名为 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>
我最近在 WPSE 上回答了类似的问题。你可以去看看这里
您是否在 Wordpress 代码中查找了 comment_form() 函数以查看是否可以编辑它?
您还可以在这里找到一些信息:
该函数使用默认形式。您需要comment-template.php
在主题中创建一个文件,然后在该文件中创建您的表单。现在,当您打电话时,comments_template()
您将获得您制作的表格,而不是默认表格。
我认为您不能更改包含的 div ( <div id="respond" class="comment-respond">
)。看看comment-template.php
您唯一可以更改的是表单 ID。'id_form' => 'commentform'
您可以在不更改这些元素的情况下制作响应式表单。