如何从我的前台上传、保存和设置特色图片?

时间:2014-07-21 作者:Arie

我的网站上有一个表单。

这是用户注册的一个失踪人员。我创建了一个自定义post类型missing person、自定义分类法和自定义字段。所有这些输入也保存在wp中。

但我不知道提交一张图片并将此图片保存为特色图片。

$my_post = array(
                 \'post_title\' => $_POST[\'title\'],
                 \'post_date\' => $_SESSION[\'cal_startdate\'],
                 \'post_content\' => $_POST[\'myContent\'],
                 \'post_status\' => \'draft\',
                 \'post_type\' => \'pessoa_desaparecida\',
              );

$post_id = wp_insert_post($my_post);


$uploaddir = wp_upload_dir();
$file = $_FILES["test"]["name"];
$uploadfile = $uploaddir[\'path\'] . \'/\' . basename( $file );

move_uploaded_file( $file , $uploadfile );
$filename = basename( $uploadfile );

$wp_filetype = wp_check_filetype(basename($filename), null );

$attachment = array(
    \'post_mime_type\' => $wp_filetype[\'type\'],
    \'post_title\' => preg_replace(\'/\\.[^.]+$/\', \'\', $filename),
    \'post_content\' => \'\',
    \'post_status\' => \'inherit\',
    \'menu_order\' => $_i + 1000
);
$attach_id = wp_insert_attachment( $attachment, $uploadfile );
update_post_meta($post_id,\'_thumbnail_id\',$attach_id);

set_post_thumbnail( $post_id, $thumbnail_id );
但不起作用

我在前台的表单是:

<form action="/homolog/cadastro" method="post" enctype="multipart/form-data">
 <input type="text"  name="title" />
 <input type="file" size="20"  name="test" />
</form>
打印:

enter image description here

enter image description here

4 个回复
SO网友:Joel M

抱歉,这不是答案,但您需要清理该用户输入。您允许将标签直接写入帖子内容,允许任何人在wp admin和站点前端运行javascript(假设您最终将打印这些帖子)。强烈建议(至少)在所有用户输入字符串上使用strip\\u tags()或htmlspecialchars()。有更好的/可供选择的方法,但这至少是一个良好的开端,不需要太多细节。

理论上,标题是个问题,但我很确定WordPress会从那里删除标签。然而,WordPress允许在帖子内容中使用脚本标记,以便人们可以使用嵌入代码。

如果您不知道不清理用户输入的风险,那么我建议在处理文件上载时更加小心。下载恶意文件或让成千上万的网站用户这样做可能比在浏览器中运行恶意javascript更糟糕。谢天谢地,wp\\u insert\\u post至少可以阻止对完全原始的用户输入进行sql注入。

我唯一进一步的建议是,至少检查允许的mime类型,并尽可能使用WordPress函数来处理上传,假设它们可能提供一些针对恶意文件的保护,但除此之外,我无法就如何安全地执行此操作给出太多建议(尽管我以前已经这样做过……我现在无法访问该代码)。

SO网友:Bindiya Patoliya

您可以这样尝试:

set_post_thumbnail( $my_post_id, $thumbnail_id );
您必须先按以下方式将图像添加到库中:

 $uploaddir = wp_upload_dir();
 $file = $_FILES[ ... whatever you have in your POST data ... ];
 $uploadfile = $uploaddir[\'path\'] . \'/\' . basename( $file );

 move_uploaded_file( $file , $uploadfile );
 $filename = basename( $uploadfile );

 $wp_filetype = wp_check_filetype(basename($filename), null );

 $attachment = array(
      \'post_mime_type\' => $wp_filetype[\'type\'],
      \'post_title\' => preg_replace(\'/\\.[^.]+$/\', \'\', $filename),
      \'post_content\' => \'\',
      \'post_status\' => \'inherit\',
      \'menu_order\' => $_i + 1000
  );
  $attach_id = wp_insert_attachment( $attachment, $uploadfile );
有关更多详细信息,请参阅this link

SO网友:David Navia

首先,您应该检查主题是否支持缩略图,以及您的失踪人员CPT是否也支持缩略图。如果通过PHP编码创建CPT,请检查以下内容:

add_theme_support( \'post-thumbnails\' );
register_post_type( \'yourposttype\', array(
    ...,
    \'supports\' => array(\'title\', ...,\'thumbnail\'),
));
}

如果这是正确的answer below 应该有用。

SO网友:Maxime Culea

在您的情况下,我建议您根据具体情况使用以下函数之一,尤其是您从$\\u POST获得的信息:

结束

相关推荐

Front-End Post Submission

我正在尝试添加一个表单,用户可以从前端提交帖子。我正在学习本教程:http://wpshout。com/wordpress从前端提交帖子/我正在做的是添加this code 到我的一个页面模板。表单显示正常,但当我单击“提交”按钮时,它会显示“Page not found error“”许多评论者说这不起作用。谁能给我指出正确的方向吗?代码是否不完整?有缺陷吗?我做错什么了吗?谢谢Towfiq I。