从前端发帖主要是工作

时间:2013-10-28 13:28:10

标签: wordpress post frontend

我正在使用此前端代码创建帖子。目前它确实创建了一个帖子,但唯一有效的是标题。

我的帖子中也有一些带有一些字段(more_info,priority和duedate等)的自定义元数据框,但我不确定我是否正确地将它们放入数组中。请注意,在后端,这些附加字段可以正常工作。

这是我的代码:

<?php
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] )) {

if (isset ($_POST['title'])) {
    $title =  $_POST['title'];
} else {
    echo 'Please enter a title';
}
if (isset ($_POST['description'])) {
    $description = $_POST['description'];
}

// Add the content of the form to $post as an array
$post = array(
    'post_title'      => $title,
    'post_content'  => $description,
    'more_info'    => $more_info,
    'priority'      => $priority,
    'duedate'       => $duedate,
    'post_category'   => $_POST['cat'],
    'post_status'    => 'publish',
    'post_type'    => $_POST['post']
);
wp_insert_post($post);
}
do_action('wp_insert_post', 'wp_insert_post'); 

?>

<form action="" id="new_post" method="post">
<label for="title">Task Name </label>
<input type="text" id="title" name="title" value="" />

<label for="minfo">Additional information</label>
<textarea name="minfo" id="minfo" value=""></textarea>

<label>Due date</label>
<input type="text" id="duedate" name="duedate" />


    <strong>Priority</strong>
    <label><input type="radio" name="priority" value="low" id="low">Low</label>
    <label><input type="radio" name="priority" value="normal" id="normal" checked>Normal</label>
    <label><input type="radio" name="priority" value="high" id="high">High</label>
    <label><input type="radio" name="priority" value="urgent" id="urgent">Urgent</label>

<input type="submit" name="submit" value="Add" />

<input type="hidden" name="cat" id="cat" value="<?php echo $cat_id = get_query_var('cat'); ?>" />
<input type="hidden" name="post_type" id="post_type" value="post" />
<input type="hidden" name="action" value="post" />
<?php wp_nonce_field( 'new-post' ); ?>

</form>

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

好的,偶然的事情:

  1. 我不清楚你在这里要做什么。您是否需要用户能够将此元框中提交的值添加到任何帖子中?如果没有,为什么不创建一个可以根据内心调整的自定义帖子类型?
  2. 如果对#1的回答是肯定的,那么您仍然希望以不同方式附加保存方法。类似的东西:

    add_meta_box(
        'my-custom-meta', // Unique ID
        esc_html__('Custom Attributes', 'my_scope'), // Title
        'my_custom_meta_box', // Callback function
        'post', // Admin page (or post type)
        'normal', // Context
        'high' // Priority
    );
    
    
    function my_custom_meta_box( $object ) { ?>
    
        <?php wp_nonce_field( 'my_custom_inner', 'my_custom_inner_nonce' ); ?>
    
        <p>
            <label for="minfo">Additional information</label>
            <textarea name="minfo" id="minfo" value="<?php echo esc_attr( get_post_meta( $object->ID, 'minfo', true ) ); ?>"></textarea>
        </p>
        <p>
            <label>Due date</label>
            <input type="text" id="duedate" name="duedate" value="<?php echo esc_attr( get_post_meta( $object->ID, 'duedate', true ) ); ?>" />
        </p>
        <p>
            <strong>Priority</strong>
            <label><input type="radio" name="priority" value="low" id="low"<?php if ( get_post_meta( $object->ID, 'priority', true ) == 'low' ) { echo ' checked'; }?>>Low</label>
            <label><input type="radio" name="priority" value="normal" id="normal"<?php if ( get_post_meta( $object->ID, 'priority', true ) == 'normal' ) { echo ' checked'; }?>>Normal</label>
            <label><input type="radio" name="priority" value="high" id="high"<?php if ( get_post_meta( $object->ID, 'priority', true ) == 'high' ) { echo ' checked'; }?>>High</label>
            <label><input type="radio" name="priority" value="urgent" id="urgent"<?php if ( get_post_meta( $object->ID, 'priority', true ) == 'urgent' ) { echo ' checked'; }?>>Urgent</label>
        </p>
    
    <?php }
    
    
    function save_my_meta( $post_id ) {
        // Check if our nonce is set.
        if ( ! isset( $_POST['my_custom_inner_nonce'] ) )
            return $post_id;
    
        $nonce = $_POST['my_custom_inner_nonce'];
    
        // Verify that the nonce is valid.
        if ( ! wp_verify_nonce( $nonce, 'my_custom_inner' ) )
            return $post_id;
    
        // If this is an autosave, our form has not been submitted, so we don't want to do anything.
        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
            return $post_id;
    
        // Check the user's permissions.
        if ( $_REQUEST['post_type'] == 'post' ) {
            if ( ! current_user_can( 'edit_post', $post_id ) )
                return $post_id;
        }
    
        /* Cast the returned vaiables to an array for processing */
        $my_meta['minfo'] = $_REQUEST['minfo'];
        $my_meta['duedate'] = $_REQUEST['duedate'];
        $my_meta['priority'] = $_REQUEST['priority'];
    
        foreach ( $my_meta as $key => $value ) { // Cycle through the $events_meta array!
            if(get_post_meta( $post_id, $key ) ) { // If the custom field already has a value
                update_post_meta( $post_id, $key, sanitize_text_field( $value ) );
            } else {
                add_post_meta( $post_id, $key, sanitize_text_field ( $value ) );
            }
            if( !$value ) delete_post_meta( $post_id, $key ); // Delete if blank
        }
    }
    add_action( 'save_post', 'save_my_meta' );