统计搜索表单模板包含在页面上的次数

时间:2016-05-08 作者:JacobTheDev

我有一个模板,在几个位置有一个搜索表单。每个搜索表单都是相同的,包含一个文本输入、两个单选按钮、两个与单选按钮关联的标签和一个提交按钮。对于第一次调用get_search_form(), 但在随后的调用中,单击标签会更改第一个输入,而不是当前表单的输入。

输入基本上是这样的:

<input type="radio" name="example" id="firstOption" />
<label for="firstOption">First Option</label>

<input type="radio" name="example" id="secondOption" />
<label for="secondOption">Second Option</label>
正如您可能已经了解到的那样,问题在于标签针对的是特定的ID,而这些ID在一个页面上出现了不止一次,这就导致了问题。

解决方案是更改它,以便在每次调用get_search_form(), ID上有一个数字,如下所示:

<!-- first call... -->
<input type="radio" name="example" id="firstOption0" />
<label for="firstOption0">First Option</label>

<input type="radio" name="example" id="secondOption0" />
<label for="secondOption0">Second Option</label>

<!-- second call... -->
<input type="radio" name="example" id="firstOption1" />
<label for="firstOption1">First Option</label>

<input type="radio" name="example" id="secondOption1" />
<label for="secondOption1">Second Option</label>
我目前通过一个会话变量来实现这一点,但我不喜欢用户在浏览页面时数字发生变化。我将其设置为在每次调用表单时向会话变量添加一个,以便用户在站点周围导航时,输入ID不断增加,直到会话结束。

我宁愿他们在每一页上都是相同的数字。是否有另一种方法来存储持久化到包含的模板的变量,而不在页面导航之间持久化?

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

只有几个简单的想法:

A) 这里有一个建议,使用get_search_form 使用静态变量筛选以处理实例计数:

add_filter( \'get_search_form\', function( $form )
{
    static $instance = 0;
    $instance++;

    // Setup your form here with the $instance variable as needed:
    $form = \'<form>...</form>\';

    return $form;
} );
B) 另一个解决方法是添加

$instance = apply_filters( \'wpse_search_instance\', 0 );
到您的searchform.php 文件中添加以下内容functions.php 文件:

add_filter( \'wpse_search_instance\', function( $count )
{
    static $instance = 0;
    return ++$instance; 
} );
但是,这种实例计数也可以通过另一个过滤器回调来修改;-)

C) 那么我们也可以在你的searchform.php 文件:

do_action( \'wpse_search_instance\' );

$instance = did_action( \'wpse_search_instance\' );
处理实例计数。这假设您不启动wpse_search_counting 其他地方的行动。

D) 我们可以在get_search_form() 功能:

 do_action( \'pre_get_search_form\' );
所以我们只需要打电话:

$instance = did_action( \'pre_get_search_form\' );
searchform.php. 我认为这是迄今为止最简单的解决方法。