it-swarm.com.de

Bearbeiten Sie einen Beitrag vom Frontend. post_tags werden gespeichert, aber nicht getrennt

Ich erstelle ein CRM-Theme für Wordpress. Also poste, bearbeite und lösche ich Posts aus dem Frontend. Ich bin auf einem guten Weg, alle Probleme zu lösen, denke ich. Aber es gibt einen Fehler. Am Index befindet sich eine Schaltfläche "Bearbeiten" und "Löschen". Wenn ich auf "Bearbeiten" klicke, komme ich zu einem Formular. Ich kann dort die post_tags ändern. Änderungen werden gespeichert, aber die einzelnen Wörter werden nicht getrennt. Alle Wörter im Eingabefeld sind ein einziges großes Tag - ich kann es in einem Widget in der Seitenleiste sehen. Aber ich benutze Trennzeichen ... Wenn Sie 2 Minuten haben:

Hier (in der index.php) kann ich einen Beitrag löschen:

if( 'POST' == $_SERVER['REQUEST_METHOD'] ) {
   set_query_var( 'postid1', $_POST['postid'] );     /*  set the "postid" value from the delete button of the post we choose to delete into "postid1" */
   wp_delete_post( get_query_var( 'postid1'), true );  /* delete the post we choosed */
};
get_header(); ?>

In der Schleife des Index finden Sie den folgenden Ausschnitt. Erstes Formular zum Bearbeiten, zweites Formular zum Löschen:

<form class="edit" action="<?php echo esc_url( home_url( '/' ) ); ?>editieren-formular/" method="post">
    <input type="hidden" name="postid" value="<?php the_ID(); ?>" /> <?php /* get the post ID into "postid" and later pass it to "editieren-formular.php" */ ?>
    <input type="submit" value="Edit" />
</form>
<form class="delete" action="" method="post">
    <input type="hidden" name="postid" value="<?php the_ID(); ?>" /> <?php /* get the post ID into "postid" and later delete the post */ ?>
    <input type="submit"  value="Delete" />
</form>

Alles ist gut. Nun die editieren-formular.php, eine Seitenvorlage für eine Site mit dem Namen "Editiere Formular". "editieren-formular" ist die Schnecke.

<?php
/*
Template Name: Editieren Formular
*/

if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) &&  $_POST['action'] == "edit_post" && isset($_POST['postid'])) {
    $post_to_edit = array();
    $post_to_edit = get_post($_POST['postid']);

    /* these are the fields that we are editing in the form below. */
    $title = $_POST['title'];
    $description = $_POST['description'];
    $vorname = $_POST['vorname'];
    $name = $_POST['name'];

    /* this code will save the title and description into the post_to_edit array */
    $post_to_edit->post_title = $title;
    $post_to_edit->post_content = $description;

    /* honestly i can't really remember why i added this code but it is a must */
    $pid = wp_update_post($post_to_edit);

    /* save taxonomies: post ID, form name, taxonomy name, if it appends(true) or rewrite(false) */
    wp_set_post_terms($pid, array($_POST['cat']),'firmen',false);
    wp_set_post_terms($pid, array($_POST['post_tags']),'post_tag',false);

    //UPDATE CUSTOM FIELDS WITH THE NEW INFO
    //CHANGE TO YOUR CUSTOM FIELDS AND ADD AS MANY AS YOU NEED

    update_post_meta($pid, 'vorname', $vorname);
    update_post_meta($pid, 'name', $name);

    //REDIRECT USER WHERE EVER YOU WANT AFTER DONE EDITING
    wp_redirect( 'http://crm-wordpress-theme.wellseo.de' );

...

} // END THE IF STATEMENT THAT STARTED THE WHOLE FORM


get_header(); 

$post_to_edit = get_post($_POST['postid']); 
$terms = get_the_terms($post_to_edit->ID, 'firmen'); 
$tags = strip_tags( get_the_term_list( $post_to_edit->ID, 'post_tag', '', ', ', '' ) ); 

<?php $term_name = strip_tags( get_the_term_list( $post_to_edit->ID, 'category', '', ', ', '' ) ); ?> <!-- get the category name of this post -->
<?php $term_obj = get_term_by('name', $term_name, 'category'); ?> <!-- get the current term object -->
<?php $term_id = $term_obj->term_id ;?> <!-- get this post's term id -->
<?php $args = array(
    'selected' => $term_id,
    'name' => 'cat',
    'class' => 'postform',
    'tab_index' => 10,
    'depth' => 2,
    'hierarchical' => 1,
    'hide_empty' => false );  /* array for wp_dropdown_category to display with the current post category selected by default */ ?>

<div id="content" role="main">

<form id="edit_post" name="edit_post" method="post" action="" enctype="multipart/form-data">
    <fieldset name="title">
        <label for="title">Title:</label><br />
        <input type="text" id="title" value="<?php echo $post_to_edit->post_title; ?>" tabindex="5" name="title" />
    </fieldset>

    <fieldset id="category">
        <label for="cat" ><?php wp_dropdown_categories( $args ); ?></label>
    </fieldset>

    <fieldset class="content">
        <label for="description">Discount Description:</label><br />
        <textarea id="description"  tabindex="15" name="description"><?php echo $post_to_edit->post_content; ?></textarea>
    </fieldset>

<!-- BELOW ARE THE CUSTOM FIELDS -->

    <fieldset class="vorname">
        <label for="vorname">Vorname:</label><br />
        <input type="text" value="<?php echo get_post_meta($post_to_edit->ID,'vorname', true); ?>" id="vorname" tabindex="20" name="vorname" />
    </fieldset>

    <fieldset class="name">
        <label for="name">Name:</label><br />
        <input type="text" value="<?php echo get_post_meta($post_to_edit->ID,'name', true); ?>" id="name" tabindex="20" name="name" />
    </fieldset>

    <fieldset class="tags">
        <label for="post_tags">Additional Keywords (comma separated):</label><br />
        <input type="text" value="<?php echo $tags; ?>" tabindex="35" name="post_tags" id="post_tags" />
    </fieldset>

    <fieldset class="submit">
        <input type="submit" value="Speichern" tabindex="40" id="submit" name="submit" />
    </fieldset>
    <input type="hidden" name="postid" value="<?php echo $post_to_edit->ID; ?>" />
    <input type="hidden" name="action" value="edit_post" />
    <input type="hidden" name="change_cat" value="" />
    <?php // wp_nonce_field( 'new-post' ); ?>
</form>
</div><!-- #content -->

<?php get_sidebar(); ?>
<?php get_sidebar('two'); ?>
<?php get_footer(); ?>
3
wellseo

Ok, habe selbst eine Lösung gefunden. In der Vergangenheit habe ich post_tags mit gespeichert

wp_set_post_terms($pid, array($_POST['post_tags']),'post_tag',false);

Jetzt speichere ich die post_tags mit

wp_set_post_tags($pid, $_POST['post_tags']);

und es funktioniert. Dies ist die gleiche Methode, die ich verwende, um einen neuen Beitrag vom Frontend aus zu veröffentlichen. Änderte nur das, sonst nichts.

3
wellseo

Wenn Sie versuchen, $_POST['post_tags'] einzufügen, bleibt tatsächlich eine lange Zeichenfolge bestehen. Was Sie als "Trennen" bezeichnen, besteht darin, aus allen Tags nur eine einzige Zeichenfolge mit einigen Trennzeichen zu erstellen:

$tags = strip_tags( get_the_term_list( $post_to_edit->ID, 'post_tag', '', ', ', '' ) ); 

Das Endergebnis ist jedoch eine einfache Zeichenfolge, die Sie teilen müssen, bevor Sie wp_set_post_terms aufrufen. Zerlegen Sie sie als Array, und Sie erhalten dann ein Array mit den Tags anstelle einer durch Kommas getrennten Zeichenfolge.

1
Mario Peshev