在循环内有一个函数

时间:2012-09-27 作者:Kyle

我正在尝试为WooCommerce制作一个前端产品编辑器,并有一个为当前用户返回所有产品的循环。我尝试使用重力表单作为编辑器,因此为每个产品显示和填充一个重力表单。然而,我不知道如何处理命名函数,这样就不会为每个产品重新声明它。

global $current_user;
new WP_Query( array( \'author\' => $current_user->ID, \'post_type\' => \'product\' ) );
while ( have_posts() ) {
    the_post();
    add_filter(\'gfrom_pre_render_7\', \'populate_each_product\');
    function populate_each_product ($form){
        foreach($form["fields"] as &$field){
            if($field["id"] == 1){
                $field["defaultValue"] = get_post_meta($post->ID, \'_virtual\', true);
            }
        }
        return $form;
    }
}
wp_reset_query();
?>
有没有办法在函数名中添加计数器或其他变量?因此,按照populate\\u each\\u product的思路。$post->ID () 还是那种性质?我已经查找了很多,但没有找到在循环中使用函数的参考,所以我担心我正在尝试的是不可能的

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

继续之前,请阅读以下内容:

http://www.slideshare.net/andrewnacin/you-dont-know-query-wordcamp-netherlands-2012

它是由核心WordPress开发人员编写的,您应该认为它是必读的。你不应该使用query_posts, 了解如何正确使用循环非常重要。该演示将展示最佳实践、如何使用以及为什么使用它们。

我可以看到你采取的方法,你想做的是:

foreach post that\'s of type product that belongs to me
    add a function that fills in the default value for that post
不幸的是,该过滤器适用于所有帖子,而不是单个帖子。此外,如果您使用的是javascript,而您使用的是lambdas,并且它是一个逐后过滤器,则您的方法是使用命名函数,例如“gfrom\\u pre\\u render\\u0”$post->ID它可能会工作,但该过滤器不存在,并且您没有使用lambdas。

因此,相反,将您的函数添加到过滤器中,它将在所有表单上执行。然后过滤掉,使其仅发生在您想要的对象上:

add_filter(\'gfrom_pre_render_7\', \'populate_each_product\');
function populate_each_product ($form){
    global $post, $current_user;
    if($post->post_type == \'product\' && $post->post_author == $current_user->ID){
        foreach($form["fields"] as &$field){
            if($field["id"] == 1){
                $field["defaultValue"] = get_post_meta($post->ID, \'_virtual\', true);
            }
         }
    }
    return $form;
}
此外,这也是正确执行查询的方式:

$q = new WP_Query( array( \'author\' => $current_user->ID, \'post_type\' => \'product\' ) );
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
        $q->the_post();
    }
    wp_reset_postdata();
}

SO网友:Rutwick Gangurde

不要在循环中添加过滤器。输入代码functions.php, 和使用get_posts 获取产品并填充表单。

结束

相关推荐

Save post meta foreach loop

我的脑子垮了。如何保存此帖子数据?在表单中构建一些键值对。 for ($i = 1; $i <= 3; $i++) { $saved = $meta[$i]; //print_r($saved); //echo $saved[\'key\']; echo \'<p>\'; echo \'<label for=\"meta_k_\'.$i.\'\">Ke