用户使用表单在正面上传图像

时间:2014-11-22 作者:user2882154

我在我的网站上使用wordpress的一个表单,允许用户创建帖子。它工作得非常好,我可以将帖子分配到自定义帖子类型,添加高级自定义字段、内容、标记。。。

我试图做的是允许用户也上传图像,使用相同的编码体系结构,因为它可以以这种方式很好地工作。

用户无需注册,因此在上传图像时,他将浏览is计算机,然后上传图像。

然后图像应保存在我的媒体库和数据库中,并分配给帖子。

例如,我想缩写为将图像分配给post\\u tumbnails或自定义字段。

我的表单中8个图像的8个新输入。

image\\u 1 image\\u 2,依此类推。。。

像这样:

<input type="file" id="image_1" name="image_1" size="40">
,然后缩写为使用插入数组中的图像对象。

以下是我的php代码:

<?php
if(isset($_POST[\'submit\'])){

    $err = array();
    $err[\'status\'] = true;
    $output = "";

    if(empty($_POST[\'nom\'])){
        $err[\'status\'] = false;
        $err[\'msg\'][] = \'Le champ "Nom" ne peut être vide.\';
    }

    if(empty($_POST[\'prenom\'])){
        $err[\'status\'] = false;
        $err[\'msg\'][] = \'Le champ "Nom" ne peut être vide.\';
    }

    if(empty($_POST[\'telephone\'])){
        $err[\'status\'] = false;
        $err[\'msg\'][] = \'Le champ "Nom" ne peut être vide.\';
    }

    if(empty($_POST[\'@mail\']) || !preg_match(\'/[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z]{2,4}/\',$_POST[\'@mail\'])){
        $err[\'status\'] = false;
        $err[\'msg\'][] = \'Le champs "Mail" est mal renseigné\';
    }

    if($err[\'status\']){

        $insert = array(
            \'post_status\'   => \'publish\',
            \'post_title\'    => $_POST [\'nom\'] . \' \' . $_POST [\'prenom\'],
            \'post_category\' => array(11),
            \'post_author\'   => 999,
            \'tags_input\' => htmlentities($_POST[\'tags\']),
            \'post_type\' => \'vendre\',        
            );

        $post_id = wp_insert_post($insert);

        if($post_id != 0){

/* CUSTOM FIELDS */

update_field(\'field_546f2983c57ae\',htmlentities($_POST[\'civilite\']),$post_id);
update_field(\'field_546f22db11f3e\',htmlentities($_POST[\'nom\']),$post_id);
update_field(\'field_546f22e011f3f\',htmlentities($_POST[\'prenom\']),$post_id);
update_field(\'field_546f22e611f40\',htmlentities($_POST[\'adresse\']),$post_id);
update_field(\'field_546f22f311f41\',htmlentities($_POST[\'code_postal\']),$post_id);
update_field(\'field_546f230211f42\',htmlentities($_POST[\'ville\']),$post_id);
update_field(\'field_546f230811f43\',htmlentities($_POST[\'pays\']),$post_id);
update_field(\'field_546f230d11f44\',htmlentities($_POST[\'telephone\']),$post_id);
update_field(\'field_546f231611f45\',htmlentities($_POST[\'@mail\']),$post_id);
update_field(\'field_546f232011f46\',htmlentities($_POST[\'localisation\']),$post_id);
update_field(\'field_546f232611f47\',htmlentities($_POST[\'prix_souhaite\']),$post_id);
update_field(\'field_546f233211f48\',htmlentities($_POST[\'description_\']),$post_id);



            $output = add_post_meta($post_id, "user_meta", json_encode($user_meta_values)) ? \'Article inséré avec succès.\' : \'Une erreur est survenue lors de l\\enregistrement.\' ;
        }

    }

    else{
        foreach($err[\'msg\'] as $k=>$v)
            $output .= $v . \'<br />\';
    }
}
?>
和我的Html:

<form method="post" action="<?php echo site_url().\'/vendre\'; ?>">    
        <label class="civilite">M.</label><input type="radio" name="civilite" id="civilite" value="monsieur">
        <label class="civilite">Mme</label><input type="radio" name="civilite" id="civilite" value="madame"> <br>
        <label for="nom">Nom</label><input type="text" name="nom" id="nom" value="" /><br>
        <label for="prenom">Prénom</label><input type="text" name="prenom" id="prenom" value="" /><br>
        <label for="adresse">Adresse</label><input type="text" name="adresse" id="adresse" value="" /><br>
        <label for="code_postal">Code Postal</label><input type="text" name="code_postal" id="code_postal" value="" /><br>
        <label for="ville">Ville</label><input type="text" name="ville" id="ville" value="" /><br>
        <label for="pays">Pays</label><input type="text" name="pays" id="pays" value="" /><br>
        <label for="telephone">Téléphone</label><input type="text" name="telephone" id="telephone" value="" /><br>
        <label for="@mail">@mail</label><input type="text" name="@mail" id="@mail" value="" /><br>
        <label for="localisation">Localisation</label><input type="text" name="localisation" id="localisation" value="" /><br>
        <label for="prix_souhaite">Prix souhaité</label><input type="text" name="prix_souhaite" id="prix_souhaite" value="" /><br>
        <label for="description_">Description rapide de votre bien et commentaires</label><textarea name="description_" id="description_" rows="10" cols="15"></textarea><br>





    <p><input type="submit" name="submit" value="envoyer" /></p>
</form>


<div class="ok"><?php echo isset($output) ? $output : \'\' ; ?></div>

1 个回复
SO网友:passatgt

如果您所做的只是用表单更新ACF字段,为什么不使用内置函数来生成表单?为图像创建一个新的ACF字段,或者只需使用Gallery字段类型,然后使用acf_form:

<?php acf_form(array(
    \'post_id\'       => \'new_post\',
    \'new_post\'      => array(
        \'post_type\'     => \'vendre\',
        \'post_status\'       => \'publish\'
    ),
    \'return\' => \'%post_url%\',
    \'submit_value\'      => \'Create\'
)); ?>
这将呈现一个完整的表单,其中包含您在定义了Vendre post类型的ACF中创建的所有字段组。因此,您无需手动创建表单、验证表单和处理图像上传,一切都是现成的。

您可以使用post_title 参数以在表单中显示标题字段。如果要根据提交的其他字段(如上面的代码)生成标题,可以执行以下操作:

//Change title on create
function vendre_title_on_save( $data, $postarr ) {

    if($data[\'post_type\'] == \'vendre\' && !empty($_POST[\'acf\'])) {

        $nom = $_POST[\'acf\'][\'field_546f22db11f3e\'];
        $prenom = $_POST[\'acf\'][\'field_546f22e011f3f\'];
        $title = $nom.\' \'.$prenom;

        $data[\'post_title\'] = $title;
    }

    return $data;
}
add_filter(\'wp_insert_post_data\', \'vendre_title_on_save\', 90, 2 );
要为帖子设置标记或分类术语,只需使用分类字段类型在ACF字段组中创建一个新字段,并确保选中“根据帖子的术语加载值并在保存时更新帖子的术语”选项。这样,您的分类法选择将包含在acf\\U表单中,并且该值也将在您的帖子中更新。

结束

相关推荐

Metaboxes-为什么它们不能以预期的方式呈现php?

在一个教程之后,我正在玩metaboxes。我可以添加任何代码,并将其显示在metabox中。我试着回应一些东西,没关系。然后我想设置一个选择表单来存储用户的选择。 <form name=\"ss_on_off_form_submit\" method=\"post\" action=\"\"> <input type=\"hidden\" name=\"ss_on_off_form_submit\" value=\"Y\"> <select