/ Aktualizácia príspevku v fronte: poslať ID príspevku na

Aktualizácia príspevku v fronte: poslať ID príspevku na

Jedná sa o veľmi jednoduchú formu, ktorá sa snaží o aktualizáciu príspevkov v frontend:

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

Vo funkcii.php mám nasledujúci skript (odstrániť riadky kontroly):

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

Ale namiesto toho upraviť príspevok, WP vytvoriť nový. To je preto, že $current_post hodnota sa neodosiela do funkcií.php. Ako to môžem urobiť bez použitia vstupu na ukladanie ID príspevku?

UPDATE

Problém bol opravený:

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");
}

odpovede:

1 pre odpoveď č. 1

Možno nájdem riešenie.

Najprv vo svojom formulári pridajte typ vstupu s názvom = "action" a value = "your_custom_function"

potom

Vytvorte svoju funkciu vo funkciách 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");

Momentálne môžete získať aktuálne číslo aktuálneho príspevku. Potom aktualizujte svoj príspevok. ID zostáva skrytý pre používateľa.

Je to len vtedy, ak odošlete formulár na stránke príspevku.


0 pre odpoveď č. 2

Môžem navrhnúť u tutoriel, ktorý vysvetľuje, ako vytvoriť nový príspevok z frontend.

@tu

Stačí do formulára pridať skrytú akciu a potom vytvoriť funkciu s hodnotou skrytého vstupu.

Nezabudnite prejsť post_id do poľa.


0 pre odpoveď č. 3

Zmeňte kód na nasledujúci a mal by fungovať:

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

Ak sa jedná o editor front-end, môžete zvážiť použitie wp-editor () namiesto textarea.