【问题标题】:custom wordpress comment form html自定义wordpress评论表单html
【发布时间】:2013-11-27 04:39:22
【问题描述】:

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

让我澄清一下:

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

【问题讨论】:

  • 没有详细说明困扰 wordpress 缺乏关注点分离的问题,我只想把它扔在那里,用ob_start()/ob_get_clean() 捕获现有表单,然后过滤使用DOMDocument 进行自定义是在 wordpress 中编辑大多数固执己见的直接 html 输出的一种非常可行的方法,特别是如果您对循环这种不可能回收的任何东西意大利面瘟疫不是超级感兴趣的话。
  • 只要使用ob_start(); comment_form(); $comment_form = ob_get_clean();,你就得到了一个字符串。

标签: php wordpress


【解决方案1】:

函数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() 的法典页面底部写着……

源代码

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

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

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

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

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

结果将是一个完整、适当、精简和平均的 WordPress 评论表单。但是......这将是一个无法再使用comment_form() 参数或相关过滤器自定义的表单,除非您继续并将过滤器代码包含在您自己的评论表单函数中。由于您已经在自定义它,这可能不是问题。同样,您或任何其他插件也将无法使用所有 WordPress 操作,除非您还在自己的评论表单功能中触发了这些操作功能。同样,此时可能对您来说不是问题。

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

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

好的,这就是我现在的全部内容。请记住(所有读者),尽管外表,我是一名业余 WordPress 主题开发人员,我对 PHP 和 WordPress 的熟练程度非常初级。刚写完这篇文章,我学到了很多。

我还担心某个地方已经有一个完整且适当的解决方案,但我在搜索中没有找到它。

【讨论】:

  • 另外,如果您仍想使用评论相关的插件,您可能需要考虑在&lt;form&gt; 标签中包含do_action('comment_form_after_fields');。
【解决方案2】:

只需创建一个名为 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>

【讨论】:

  • 您的回答不清楚如何使用自定义表单字段。
  • 使用comment_form() 不会加载comment_form.php 文件
【解决方案3】:

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

所以,如果您想编辑整个布局(例如:将一些内容并排放置,而不是彼此叠放;将某些 &lt;p&gt; 替换为 &lt;div&gt;),您就完蛋了运气。

我们能做什么?

一个选项是从 WordPress 代码库 (like this guy did) 借用整个 comment_form() 函数:在您的主题中复制该函数,重命名它,自定义它,然后调用它来代替原版函数.这会起作用,但如果 WP 的某些内部工作发生变化,它可能会在未来的 WordPress 更新中中断。

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

    • 是的,这仅允许您添加删除字段和各种其他文本。它实际上并没有提供更改包装 HTML 或 css 类的方法。
    【解决方案5】:

    此函数使用默认形式。您需要在主题中创建一个comment-template.php 文件,然后在该文件中创建表单。 现在,当您致电comments_template() 时,您将获得自己制作的表格,而不是默认表格。

    【讨论】:

    • 好的,但这对我的表格没有帮助。我如何让它发布数据?我发帖到哪个网址?它期望什么帖子字段?如何在用户登录时自动提供用户详细信息?
    • 好的,在你的主题中搜索 cmets.php,用你的表单替换 cmets_form()。您的表单操作将是“/wp-cmets-post.php”。
    • 字段名称是什么?什么是必填字段?您如何处理已登录用户和已注销用户?据我所知,这些都没有记录在 WordPress 网站上。
    【解决方案6】:

    我认为您不能更改包含的 div (&lt;div id="respond" class="comment-respond"&gt;)。看看comment-template.php

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

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

    【讨论】:

    • 不。我知道如何修改字段。我想不通的是如何修改实际包含的 div
    • 我还需要修改表单元素本身
    【解决方案7】:

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

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 2012-02-01
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多