前端页面提交表单未附加自定义帖子类型

时间:2015-01-16 作者:NDog

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 } ?>

1 个回复
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\'] ) )

结束

相关推荐

Call another page in forms

我正在为WordPress插件做一些练习。在插件中,我正在处理一个表单,我需要的是在提交时调用另一个页面。我试过了,但似乎什么都没用。<form method = \"Post\" action = \"some_file.php\"> </form>