WordPress的这一面对我来说是全新的,但也非常重要。我创建了一个表单,允许我上载一个页面,其中包含我需要的所有参数,但是没有为该页面指定自定义分类法。但是,我需要一个自定义分类法“墙”中所有术语的下拉列表,以便用户可以选择术语并将其分配给帖子。我曾在stack exchange上搜索过,但我发现的代码示例都不适合我。我尝试过分类代码,效果很好。
代码:
<?php if ( is_user_logged_in() ) { ?>
<?php
$postTitleError = \'\';
if(isset($_POST[\'submitted\']) && isset($_POST[\'post_nonce_field\']) && wp_verify_nonce($_POST[\'post_nonce_field\'], \'post_nonce\')) {
if(trim($_POST[\'postTitle\']) === \'\') {
$postTitleError = \'Please enter a title.\';
$hasError = true;
} else {
$postTitle = trim($_POST[\'postTitle\']);
}
$post_information = array(
\'post_title\' => esc_attr(strip_tags($_POST[\'postTitle\'])),
\'post_content\' => esc_attr(strip_tags($_POST[\'postContent\'])),
\'post_type\' => \'page\',
\'page_template\' => \'Review.php\',
\'post_status\' => \'pending\',
\'tax_input\' => array( \'walls\' => array( $_POST[\'pickWall\'] ) ),
);
$post_id = wp_insert_post($post_information);
if($post_id)
{
// Update Custom Meta
update_post_meta($post_id, \'product_aesthetics\', esc_attr(strip_tags($_POST[\'product_aesthetics_meta\'])));
wp_redirect(home_url());
exit;
}
}
?>
<?php get_header(); ?>
<!-- #primary BEGIN -->
<div id="primary">
<form action="" id="primaryPostForm" method="POST">
<fieldset>
<label for="postTitle"><?php _e(\'Post\\\'s Title:\', \'framework\') ?></label>
<input type="text" name="postTitle" id="postTitle" value="<?php if(isset($_POST[\'postTitle\'])) echo $_POST[\'postTitle\'];?>" class="required" />
</fieldset>
<?php if($postTitleError != \'\') { ?>
<span class="error"><?php echo $postTitleError; ?></span>
<div class="clearfix"></div>
<?php } ?>
<fieldset>
<label for="postContent"><?php _e(\'Post\\\'s Content:\', \'framework\') ?></label>
<textarea name="postContent" id="postContent" rows="8" cols="30"><?php if(isset($_POST[\'postContent\'])) { if(function_exists(\'stripslashes\')) { echo stripslashes($_POST[\'postContent\']); } else { echo $_POST[\'postContent\']; } } ?></textarea>
</fieldset>
<fieldset>
<label for="product_aesthetics_meta"><?php _e(\'Product Aesthetics Meta:\', \'framework\') ?></label>
<textarea name="product_aesthetics_meta" id="product_aesthetics_meta" rows="8" cols="30"><?php if(isset($_POST[\'product_aesthetics_meta\'])) { if(function_exists(\'stripslashes\')) { echo stripslashes($_POST[\'product_aesthetics_meta\']); } else { echo $_POST[\'product_aesthetics_meta\']; } } ?></textarea>
</fieldset>
<fieldset>
<label for="pickWall">Type of wall</label>
<select name="pickWall">
<?php
// ======= Custom post types category drop down ========
$taxonomy = \'walls\';
$terms = get_terms($taxonomy); // Get all terms of a taxonomy
if ( $terms && !is_wp_error( $terms ) ) :
foreach ( $terms as $term ) {
echo \'<option value="\' . get_term_link($term->slug, $taxonomy) . \'">\' . $term->name . \'</option>\';
}
endif;
?>
</select>
</fieldset>
<fieldset>
<?php wp_nonce_field(\'post_nonce\', \'post_nonce_field\'); ?>
<input type="hidden" name="submitted" id="submitted" value="true" />
<button type="submit"><?php _e(\'Add Post\', \'framework\') ?></button>
</fieldset>
</form>
</div><!-- #primary END -->
<?php } ?>
SO网友:Milo
首先,您应该将输入字段名称更改为唯一的名称。category
是WordPress查询变量,因此使用该字段名提交表单可能会产生意外结果。
也就是说,post_category
仅适用于category
分类法,自定义分类法应使用tax_input
参数
however... 如果此表单由未登录或无法在自定义分类法中分配术语的用户提交,则必须使用wp_set_object_terms
插入帖子后指定术语。请参见中的注释wp_insert_post
:
“tax\\u input”:相当于为数组中的每个自定义分类法调用wp\\u set\\u post\\u terms()。如果当前用户没有能力使用分类法,则必须改用wp\\u set\\u object\\u terms()。
编辑-
对于“选择”字段,可以输出术语ID作为选项值:
<?php
// ======= Custom post types category drop down ========
$taxonomy = \'walls\';
$terms = get_terms($taxonomy); // Get all terms of a taxonomy
if ( $terms && !is_wp_error( $terms ) ) :
foreach ( $terms as $term ) {
echo \'<option value="\' . $term->term_id . \'">\' . $term->name . \'</option>\';
}
endif;
?>
然后,当您插入帖子时:
\'tax_input\' => array( \'walls\' => array( $_POST[\'your_tax_field\'] ) )