自定义 post 类型中用户选择的预定义值(元数据与分类法)
Predefined values for user selection in custom post type (metadata vs taxonomy)
我正在构建一个插件,允许访问者提交软件配置以与他人共享。他们输入几位信息(他们的名字、软件和机器),然后上传他们的 XML 配置文件,最终将其转换为自定义 post 类型。
截至目前,我将他们输入的所有内容(如姓名、软件、机器类型等)存储为元数据。不过,我想为 software/machine 类型预定义选项,允许他们在提交时从这些选项中进行选择。
在 Wordpress 中实现此目的的好方法是什么?我应该通过表单将这些作为预定义值保存在 select 框中,然后将数据另存为元数据中的文本还是有更好的选择?
function slicer_profile_form()
{
echo '<form action="' . esc_url( $_SERVER['REQUEST_URI'] ) . '" method="post" enctype="multipart/form-data">';
echo '<p>';
echo 'Your Name<br />';
echo '<input type="text" name="slicer-profile-author" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["slicer-profile-author"] ) ? esc_attr( $_POST["slicer-profile-author"] ) : '' ) . '" size="48" />';
echo '</p>';
echo '<p>';
echo 'Profile Name<br />';
echo '<input type="text" name="slicer-profile-name" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["slicer-profile-name"] ) ? esc_attr( $_POST["slicer-profile-name"] ) : '' ) . '" size="48" />';
echo '</p>';
echo '<p>';
echo 'Profile Description<br />';
echo '<textarea name="slicer-profile-description" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["slicer-profile-description"] ) ? esc_attr( $_POST["slicer-profile-description"] ) : '' ) . '" rows="4"></textarea>';
echo '</p>';
echo '<p>';
echo '3D Printer Model<br />';
echo '<select name="slicer-profile-model">';
echo '<option value="a8">Anet A8</option>';
echo '<option value="cr10">Creality CR-10</option>';
echo '<option value="mini">Monoprice Select Mini</option>';
echo '<option value="makerselect">Monoprice Maker Select</option>';
echo '<option value="ultimate">Monoprice Ultimate</option>';
echo '<option value="prusamk2">Prusa MK2/MK2S/MK3</option>';
echo '</select>';
echo '</p>';
echo '<p>';
echo 'Slicer Software<br />';
echo '<select name="slicer-profile-software">';
echo '<option value="cura">Cura</option>';
echo '<option value="s3d">Simplify3D</option>';
echo '<option value="slic3r">Slic3r</option>';
echo '</select>';
echo '</p>';
echo '<p>';
echo 'Slicer Profile<br />';
echo '<input type="file" name="slicer-profile" accept=".fff,.ini,.curaprofile">';
echo '</p>';
echo '<p><input type="submit" name="slicer-profile-submitted" value="Submit"/></p>';
echo '</form>';
}
如果您想将项目组合在一起,请使用分类法。除了这个词的字面定义之外,它还可以很容易地为同一软件提取所有帖子并将它们分组。这就是 Taxonomy excel 所在的位置。
如果您只是有一个更全面的 CPT,那么只需要附加一些任意信息,这就是 Custom Fields excel 的内容。这主要用于不明确相关的任意信息,例如 Price
、Event Start Date
或 Facebook Group/Page URL
.
听起来您更适合软件和机器类型的 taxonomy/term 关系,尽管最终取决于您。您 可以 根据自定义字段查询帖子,但可明确定义的信息更适合分类法。
顺便说一句,是否有任何特殊原因让您每行使用回显语句而不是仅仅关闭 PHP 标记并回显标准 PHP 中的几个变量 HTML?
function slicer_profile_form(){ ?>
<form action="<?= esc_url( $_SERVER['REQUEST_URI'] ); ?>" method="post" enctype="multipart/form-data">
<label>
Your Name<br>
<input type="text" name="slicer-profile-author" pattern="[a-zA-Z0-9 ]+" value="<?= ( isset( $_POST["slicer-profile-author"] ) ? esc_attr( $_POST["slicer-profile-author"] ) : '' ); ?>" size="48" />
</label>
<label>
Profile Name<br>
<input type="text" name="slicer-profile-name" pattern="[a-zA-Z0-9 ]+" value="<?= ( isset( $_POST["slicer-profile-name"] ) ? esc_attr( $_POST["slicer-profile-name"] ) : '' ); ?>" size="48" />
</label>
<label>
Profile Description<br>
<textarea name="slicer-profile-description" pattern="[a-zA-Z0-9 ]+" value="<?= ( isset( $_POST["slicer-profile-description"] ) ? esc_attr( $_POST["slicer-profile-description"] ) : '' ); ?>" rows="4"></textarea>
</label>
<label>
3D Printer Model<br>
<select name="slicer-profile-model">
<option value="a8">Anet A8</option>
<option value="cr10">Creality CR-10</option>
<option value="mini">Monoprice Select Mini</option>
<option value="makerselect">Monoprice Maker Select</option>
<option value="ultimate">Monoprice Ultimate</option>
<option value="prusamk2">Prusa MK2/MK2S/MK3</option>
</select>
</label>
<label>
Slicer Software<br>
<select name="slicer-profile-software">
<option value="cura">Cura</option>
<option value="s3d">Simplify3D</option>
<option value="slic3r">Slic3r</option>
</select>
</label>
<label>
Slicer Profile<br>
<input type="file" name="slicer-profile" accept=".fff,.ini,.curaprofile">
</label>
<p>
<input type="submit" name="slicer-profile-submitted" value="Submit" />
</p>
</form>
<?php } ?>
我正在构建一个插件,允许访问者提交软件配置以与他人共享。他们输入几位信息(他们的名字、软件和机器),然后上传他们的 XML 配置文件,最终将其转换为自定义 post 类型。
截至目前,我将他们输入的所有内容(如姓名、软件、机器类型等)存储为元数据。不过,我想为 software/machine 类型预定义选项,允许他们在提交时从这些选项中进行选择。
在 Wordpress 中实现此目的的好方法是什么?我应该通过表单将这些作为预定义值保存在 select 框中,然后将数据另存为元数据中的文本还是有更好的选择?
function slicer_profile_form()
{
echo '<form action="' . esc_url( $_SERVER['REQUEST_URI'] ) . '" method="post" enctype="multipart/form-data">';
echo '<p>';
echo 'Your Name<br />';
echo '<input type="text" name="slicer-profile-author" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["slicer-profile-author"] ) ? esc_attr( $_POST["slicer-profile-author"] ) : '' ) . '" size="48" />';
echo '</p>';
echo '<p>';
echo 'Profile Name<br />';
echo '<input type="text" name="slicer-profile-name" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["slicer-profile-name"] ) ? esc_attr( $_POST["slicer-profile-name"] ) : '' ) . '" size="48" />';
echo '</p>';
echo '<p>';
echo 'Profile Description<br />';
echo '<textarea name="slicer-profile-description" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["slicer-profile-description"] ) ? esc_attr( $_POST["slicer-profile-description"] ) : '' ) . '" rows="4"></textarea>';
echo '</p>';
echo '<p>';
echo '3D Printer Model<br />';
echo '<select name="slicer-profile-model">';
echo '<option value="a8">Anet A8</option>';
echo '<option value="cr10">Creality CR-10</option>';
echo '<option value="mini">Monoprice Select Mini</option>';
echo '<option value="makerselect">Monoprice Maker Select</option>';
echo '<option value="ultimate">Monoprice Ultimate</option>';
echo '<option value="prusamk2">Prusa MK2/MK2S/MK3</option>';
echo '</select>';
echo '</p>';
echo '<p>';
echo 'Slicer Software<br />';
echo '<select name="slicer-profile-software">';
echo '<option value="cura">Cura</option>';
echo '<option value="s3d">Simplify3D</option>';
echo '<option value="slic3r">Slic3r</option>';
echo '</select>';
echo '</p>';
echo '<p>';
echo 'Slicer Profile<br />';
echo '<input type="file" name="slicer-profile" accept=".fff,.ini,.curaprofile">';
echo '</p>';
echo '<p><input type="submit" name="slicer-profile-submitted" value="Submit"/></p>';
echo '</form>';
}
如果您想将项目组合在一起,请使用分类法。除了这个词的字面定义之外,它还可以很容易地为同一软件提取所有帖子并将它们分组。这就是 Taxonomy excel 所在的位置。
如果您只是有一个更全面的 CPT,那么只需要附加一些任意信息,这就是 Custom Fields excel 的内容。这主要用于不明确相关的任意信息,例如 Price
、Event Start Date
或 Facebook Group/Page URL
.
听起来您更适合软件和机器类型的 taxonomy/term 关系,尽管最终取决于您。您 可以 根据自定义字段查询帖子,但可明确定义的信息更适合分类法。
顺便说一句,是否有任何特殊原因让您每行使用回显语句而不是仅仅关闭 PHP 标记并回显标准 PHP 中的几个变量 HTML?
function slicer_profile_form(){ ?>
<form action="<?= esc_url( $_SERVER['REQUEST_URI'] ); ?>" method="post" enctype="multipart/form-data">
<label>
Your Name<br>
<input type="text" name="slicer-profile-author" pattern="[a-zA-Z0-9 ]+" value="<?= ( isset( $_POST["slicer-profile-author"] ) ? esc_attr( $_POST["slicer-profile-author"] ) : '' ); ?>" size="48" />
</label>
<label>
Profile Name<br>
<input type="text" name="slicer-profile-name" pattern="[a-zA-Z0-9 ]+" value="<?= ( isset( $_POST["slicer-profile-name"] ) ? esc_attr( $_POST["slicer-profile-name"] ) : '' ); ?>" size="48" />
</label>
<label>
Profile Description<br>
<textarea name="slicer-profile-description" pattern="[a-zA-Z0-9 ]+" value="<?= ( isset( $_POST["slicer-profile-description"] ) ? esc_attr( $_POST["slicer-profile-description"] ) : '' ); ?>" rows="4"></textarea>
</label>
<label>
3D Printer Model<br>
<select name="slicer-profile-model">
<option value="a8">Anet A8</option>
<option value="cr10">Creality CR-10</option>
<option value="mini">Monoprice Select Mini</option>
<option value="makerselect">Monoprice Maker Select</option>
<option value="ultimate">Monoprice Ultimate</option>
<option value="prusamk2">Prusa MK2/MK2S/MK3</option>
</select>
</label>
<label>
Slicer Software<br>
<select name="slicer-profile-software">
<option value="cura">Cura</option>
<option value="s3d">Simplify3D</option>
<option value="slic3r">Slic3r</option>
</select>
</label>
<label>
Slicer Profile<br>
<input type="file" name="slicer-profile" accept=".fff,.ini,.curaprofile">
</label>
<p>
<input type="submit" name="slicer-profile-submitted" value="Submit" />
</p>
</form>
<?php } ?>