使用IF(IS_PAGE)添加重力表单不起作用

时间:2018-11-19 作者:jarrodwhitley

请容忍我,因为我是一名前端开发人员,正在努力解决PHP问题。

我正试图通过在我的网站上添加一个函数,将重力表单添加到我的网站上的特定页面functions.php 文件它在页面上的位置无关紧要,因为表单最初将被隐藏,然后用于退出意图弹出窗口。Gravity form\'s documentation 表示可以通过PHP函数调用嵌入重力表单。这是他们给出的示例:

gravity_form( 1, false, false, false, \'\', false );
在搜索了我找到的已问过的问题后this post 关于只调用指定页面上的函数的条件PHP。我试着把这一切放在一起。结果如下:

function add_split_test_forms()
{
    if (is_page(\'Homepage\')):
    gravity_form(19, false, false, false, \'\', false);
    endif;
}
我加了一句;添加\\u split\\u test\\u表单“;因为我假设这只是我对函数的命名(如果我错了,请纠正我)。

不幸的是,这不起作用。我尝试了其他变体,例如使用页面id而不是页面名称,但结果是一样的。

我回到了关于条件PHP的帖子,并尝试了另一个经过投票的答案(被接受的答案),结果我尝试了以下代码:

function add_split_test_forms()
{
  global $post;

  <?php if( $post->ID == 5457) { ?>
      gravity_form(19, false, false, false, \'\', false);
      endif;
  <?php } ?>
}
这打破了一切,所以我也尝试了:

function add_split_test_forms()
{
  global $post;

  if( $post->ID == 5457) { 
      gravity_form(19, false, false, false, \'\', false);
      endif;
  }
}
这也打破了一切。所以现在我回到第一个例子,它至少不会让整个网站瘫痪。

在文档页面的末尾,它说:

当通过函数调用嵌入表单时,还必须通过内置WordPress排队功能手动包含必要的重力表单相关Javascript和CSS。Gravity表单在通过函数调用调用表单时默认不包括这些,并且它们对于包含条件逻辑或日期选择器字段的表单是必需的。

我们强烈建议您将脚本排队,而不是将它们作为硬编码调用包含在主题中。以这种方式实现它将确保重力表单不会在页面上包含它们(如果它们已经存在)。仅在前端加载这些脚本也是一种很好的做法。

Gravity Forms 1.5引入了Gravity\\u form\\u enqueue\\u scripts()函数,该函数允许您在手动嵌入表单时轻松将必要的Gravity表单脚本和样式排入队列。如果您使用的是GF小部件,并且不希望以内联方式加载样式和脚本,那么这也很有用。

当我查看文档时gravity_form_enqueue_scripts 它提供了这个示例gravity_form_enqueue_scripts( 4, true ); 并说:

此脚本应放置在主题的标题中。调用wp\\u head()函数之前的php文件。

但是我不能把它添加到函数中吗。php文件?当我尝试时:

function add_split_test_forms()
{
    if (is_page(\'Homepage\')):
        gravity_form_enqueue_scripts( 19, true );
        gravity_form(19, false, false, false, \'\', false);
    endif;
}
以及

gravity_form_enqueue_scripts( 19, true );

function add_split_test_forms()
{
    if (is_page(\'Homepage\')):
gravity_form(19, false, false, false, \'\', false);
    endif;
}
这两种方法都行不通。我需要挂到wp_head() 在我的functions.php 要添加的文件gravity_form_enqueue_scripts( 19, true );?

Important notes to preempt what questions I can think of:

<这将添加到我的functions.php 关闭前的文件?>.[page-specific-settings].

3 个回复
最合适的回答,由SO网友:jarrodwhitley 整理而成

好吧,我想出来了。我只需要wp_footer. 唯一添加到header.phpgravity_form_enqueue_scripts() 作用根据文件:

此函数将为指定的重力表单排列必要的样式和脚本。当使用函数调用在WordPress循环外部手动嵌入表单时,或者当使用表单小部件时,强制在标题中加载样式表和脚本时,这非常有用。

function add_split_test_forms()
{
    if (is_page([4904,2559,356,358,360,376,362,364,366,354,372,374])):
        gravity_form(19, false, false, false, \'\', false);
    endif;
}
add_action( \'wp_footer\', \'add_split_test_forms\' );
Edit: 雅各布在下面建议,表格永远不要放在<head> 而是在页脚。为了反映这一点,我改变了答案。

SO网友:André Kelling

如果你的functions.php

function add_split_test_forms()
{
    if (is_page(\'Homepage\')):
    gravity_form(19, false, false, false, \'\', false);
    endif;
}
你至少需要run this function once: 添加一行add_split_test_forms() 在您的functions.php.

如果你的情况if (is_page(\'Homepage\')): 是正确的。(我更喜欢if ( is_front_page()): 也应该有效。)然后表单应该出现在标记中,如您所说。

SO网友:Pat J

我建议您使用the_content filter hook 要添加表单,请执行以下操作:

add_filter( \'the_content\', \'add_split_test_forms\' );

function add_split_test_forms( $content ) {
    if ( is_page( \'Homepage\' ) ) {
        $content .= gravity_form( 19, false, false, false, \'\', false, 1, true );
        return $content;
    }
}
。。。以及wp_enqueue_scripts action hook 要将脚本排队,请执行以下操作:

add_action( \'wp_enqueue_scripts\', \'wpse319642_add_scripts_for_form_19\' );
function wpse319642_add_scripts_for_form_19() {
    // 2nd param is \'false\' b/c you\'ve set AJAX to \'false\' in the gravity_form() call
    gravity_form_enqueue_scripts( 19, false );
}
所有这些代码都可以放在你的主题中functions.php 文件

此代码为untested, 但我认为这应该奏效。

(与@majick的评论相呼应:有没有令人信服的理由不简单地使用Gravity表单短代码将表单嵌入WordPress编辑器?)

结束