web-dev-qa-db-fra.com

wp_insert_post permet aux utilisateurs d'envoyer des messages sans connexion ... cassé

cette question a reçu une réponse sur stackoverflow. voici un lien https://stackoverflow.com/questions/4321914/wp-insert-post-with-a-form/4321975#4321975

j'essaie de laisser les utilisateurs publier sur mon site en utilisant la fonction wp_insert_post() ..

<?php $postTitle = $_POST['post_title'];
    $post = $_POST['post'];
    $submit = $_POST['submit'];

    if(isset($submit)){

        global $user_ID;

        $new_post = array(
            'post_title' => $postTitle,
            'post_content' => $post,
            'post_status' => 'publish',
            'post_date' => date('Y-m-d H:i:s'),
            'post_author' => $user_ID,
            'post_type' => 'post',
            'post_category' => array(7,100)
        );

        wp_insert_post($new_post);

    }

?>

Je l'ai relié à un formulaire sur une page de catégorie

<form method="post" action=""> 
<input type="text" name="post_title" size="45" id="input-title"/>

<textarea rows="5" name="post" cols="66" id="text-desc"></textarea> 


<input type="hidden" name="cat" value="7,100"/> 

<input class="subput round" type="submit" name="submit" value="Post"/>
</form>

Je ne sais pas quelle identité a eu tort ... ça ne marche pas. des idées? Merci

2
andrewk

wp_insert_post () utilise l'utilisateur actuel à plusieurs endroits, si la mémoire le permet.

Donc, vous voudriez utiliser wp_set_current_user () pour changer cela en un utilisateur auteur partagé, puis revenir à sa valeur initiale lorsque vous avez terminé.

Vous pouvez également exiger que les utilisateurs soient connectés et autoriser tous les groupes à créer des brouillons.

2
Denis de Bernardy

Un problème que vous avez est

if(isset($submit)){

vous déclarez $ soumettre en ligne ci-dessus

$submit = $_POST['submit'];

c'est pourquoi

isset($submit)

retournera toujours VRAI et exécutera votre code.

Je voudrais bien ajouter

global $user_ID;
if ( $user_ID )
{
     //insert your post
}
else
{
     //give that person a message "Dude, you have to sign up or login to be able to submit content..."
}

Ensuite, ignorez les valeurs post_date et post_type avec vos valeurs, celles-ci étant de toute façon ajoutées. Moins vous passez à cette fonction, moins vous pouvez vous tromper ...

Je voudrais essayer d'ajouter ceci à votre exemple. script function.php

$new_post = array(
            'post_title' => 'Test Post Title',
            'post_content' => 'Test Post Content',
            'post_status' => 'publish',
            'post_author' => $user_ID,

        );
wp_insert_post($new_post);

Cela devrait insérer un article de presse avec les valeurs définies ... Si cela fonctionne, vous savez que vous devez rechercher l'erreur dans votre formulaire. Je pense bien que vous ne pouvez pas passer de catégories à wp_insert_post .... Mais essayez d'abord le test simple.

0
chris