2015-10-22 21 views
0

這是一個非常簡單的形式,我起訴更新前端職位:更新後:發送帖子的ID添加到functions.php

<?php $current_post = $post->ID; ?> 
<form action="" method="post"> 
    <input type="text" name="title" value="<?php echo $title; ?>"> 
    <textarea name="text"><?php echo $content; ?></textarea> 
    <input type="submit" value="edit post"> 
    <?php wp_nonce_field('edit_post', 'edit_post_nonce'); ?> 
    <input type="hidden" name="edit_post" value="true" /> 
</form> 

在functions.php中,我有以下腳本(我刪除驗證線):

if('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['edit_post'])) { 
    global $current_post; 

    $post = array(
     'ID' => $current_post, 
     'post_type'  => 'post', 
     'post_title' => wp_strip_all_tags($_POST['title']), 
     'post_content' => wp_strip_all_tags($_POST['text']), 
     'post_status' => 'publish' 
    ); 

    $post_id = wp_update_post($post); 

    if ($post_id) { 
     wp_redirect(home_url('list-posts/?status=edit')); 
     exit; 
    } 
} 

但相反對帖子進行編輯,WP創建一個新的。這是因爲$current_post值不會發送到functions.php。我如何做到這一點,而不使用輸入來存儲帖子ID?

UPDATE

問題修正:

function edit_post_foo($query){ 
    $id = get_the_id(); 

    $post = array(
     'ID' => $id, 
     'post_type'  => 'post', 
     'post_title' => wp_strip_all_tags($_POST['title']), 
     'post_content' => wp_strip_all_tags($_POST['text']), 
     'post_status' => 'publish' 
    ); 

    $post_id = wp_update_post($post); 

    if ($post_id) { 
     wp_redirect($_SERVER['HTTP_REFERER']); 
     exit; 
    } 
} 

if('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['edit_post'])) { 

    if (! isset($_POST['edit_post_nonce'])) { 
     return; 
    } 

    if (! wp_verify_nonce($_POST['edit_post_nonce'], 'edit_post')) { 
     return; 
    } 

    if (isset($_POST['post_type']) && 'post' == $_POST['post_type']) { 

     if (! current_user_can('edit_posts')) { 
      return; 
     } 
    } 

    if(empty(trim($_POST['title']))){ 
     $erro = "inform a title."; 
     return; 
    } 

    if(empty(trim($_POST['text']))){ 
     $erro = "sen a text."; 
     return; 
    } 

    add_action("wp", "edit_post_foo"); 
} 
+0

會話變量? – rnevius

+0

@rnevius我正在考慮使用wp鉤子,我可以抓住帖子ID – marcelo2605

+0

如果您嘗試等待查詢運行/張貼創建對象,那麼標頭可能已經發送... – rnevius

回答

1

我可能找到一個解決方案。

首先,在你的形式到functions.php

function your_function($query) 
{ 
    $id = get_the_id(); 

    // do something 

    wp_redirect($_SERVER['HTTP_REFERER']); 
    exit; 
} 
if(isset($_POST["action"]) && $_POST["action"] == "your_custom_value") 
    add_action("wp", "your_function"); 

添加輸入型與名稱= 「行動」 和值= 「your_custom_function」

然後

創建你的函數在此時,您可以獲取當前帖子的當前ID。 然後更新你的帖子。 該ID保持隱藏爲用戶。

這隻有在您發送帖子頁面上的表單時纔有效。

+0

不錯!我將在上面發佈我的完整代碼。 – marcelo2605

0

我可以建議ü解釋如何創建一個從前端一個新職位的tutoriel。

@here

在表單中只需添加一個隱藏的動作,然後創建一個隱藏的輸入值的函數。

不要忘記在post數組中傳遞post_id。

+0

感謝您的建議。但我正在尋找一個解決方案,用戶不能更改帖子ID。 – marcelo2605

0

你的代碼更改爲以下,它應該工作:

<form action="" method="post"> 
    <input type="text" name="title" value="<?php echo $title; ?>"> 
    <textarea name="text"><?php echo $content; ?></textarea> 
    <input type="hidden" name="postID" value="<?php echo get_the_ID(); ?>"> 
    <input type="submit" value="edit post"> 
    <?php wp_nonce_field('edit_post', 'edit_post_nonce'); ?> 
    <input type="hidden" name="edit_post" value="true" /> 
</form> 

<?php 
    if('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['edit_post'])) { 
     $current_post = $_POST['postID']; 

     $post = array(
      'ID' => $current_post, 
      'post_type'  => 'post', 
      'post_title' => wp_strip_all_tags($_POST['title']), 
      'post_content' => wp_strip_all_tags($_POST['text']), 
      'post_status' => 'publish' 
     ); 

     $post_id = wp_update_post($post); 

     if ($post_id) { 
      wp_redirect(home_url('list-posts/?status=edit')); 
      exit; 
     } 
    } 
?> 

如果這是一個前端編輯器,你可能要考慮使用wp-editor(),而不是一個文本。

+0

感謝您的建議。但是我想分開看看功能。所以我試圖把函數提交到functions.php文件中。還有一種提交帖子ID的方式,用戶無法更改它。 – marcelo2605

+0

你可以使用Ajax而不是提交嗎? –