我在我的网站上使用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>
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表单中,并且该值也将在您的帖子中更新。