Wordpress: post inseriti programmaticamente non visibili nel profilo dell'autore

18 giu 2022, 14:17:53
Visualizzazioni: 74
Voti: 1

Ho inserito un post programmaticamente in WordPress. Quando visualizzo il post nella pagina dell'autore, il post che ho inserito programmaticamente non viene mostrato, ma se aggiorno manualmente il post, poi funziona e viene visualizzato correttamente. Qual è la causa e come posso risolverlo? Esiste una guida?

Codice nel mio plugin:

add_action('wp_ajax_insert_data_to_post_type_func', 'insert_data_to_post_type_func');

function insert_data_to_post_type_func(){
    global $wpdb;
    $table_name = $wpdb->prefix . 'ebay_listings';
    $select_query =  $wpdb->get_results("SELECT * FROM $table_name LIMIT 1");
    $user_id_get = $_POST['userID'];
    foreach ($select_query as $sq) {
        
        $heading = $sq->title;
        $x = json_decode($heading);

        $des = $sq->long_desctiption;
        $y = json_decode($des);
        $z = json_decode($sq->add_id);
        $imgs = json_decode($sq->image_URL);
        $date = json_decode($sq->date);
        $location = json_decode($sq->location);
        $list_items = json_decode($sq->list_items);
        $price = json_decode($sq->price);

        foreach ($x as $tx) {
            $title[] = $tx;
        }
        foreach ($y as $lng_des) {
            $description[] = $lng_des;
        }

        foreach ($z as $add) {
            $add_id[] = $add;
        }
        foreach ($date as $dt) {
            $eb_date[] = $dt;
        }
        foreach ($location as $loc) {
            $locality[] = $loc;
        }
        foreach ($list_items as $lit) {
            $listings[] = $lit;
        }
        foreach ($price as $p) {
            $pricing[] = $p;
        }
        $i = -1;
      
        foreach ($imgs as $sd) {
          
            $i++;
            $image_name = basename($sd);
           
            $advert_posts = array(
                'post_author' => $user_id_get,
                'post_type' => 'advert',
                'post_title' => $title[$i],
                'post_content' => $description[$i] . $listings[$i],
                'post_status' => 'publish',
            );
            $post_id = wp_insert_post($advert_posts);
            $category_id = 877;
            $taxonomy = 'advert-category';
            wp_set_object_terms( $post_id, array( $category_id ), $taxonomy , true );
            add_post_meta( $post_id , 'advert_sale_price' , $pricing[$i]);
            add_post_meta( $post_id , 'advert_type' , 1);
            add_post_meta( $post_id , 'advert_negotiable' , 1);
            add_post_meta( $post_id , 'advert_location' , $locality[$i]);
            
            var_dump( get_post_field( 'post_author', $post_id ), $user_id_get);
            
            $upload = wp_upload_bits($image_name, null, file_get_contents($sd, FILE_USE_INCLUDE_PATH));
            $imageFile = $upload['file'];
            $wpFileType = wp_check_filetype($imageFile, null);
          
            // Imposta meta per la galleria
            $attachment = array(
                'post_mime_type' => $wpFileType['type'],  // tipo di file
                'post_title' => sanitize_file_name($imageFile),  // sanitizza e usa il nome dell'immagine come nome file
                'post_content' => '',  // potresti usare la descrizione dell'immagine come contenuto
                'post_status' => 'inherit'
            );
            $attachmentId = wp_insert_attachment($attachment, $imageFile, $post_id);

            // genera e restituisce i metadati dell'allegato
            $attachmentData = wp_generate_attachment_metadata($attachmentId, $imageFile);

            // aggiorna e restituisce i metadati dell'allegato
            wp_update_attachment_metadata($attachmentId, $attachmentData);
            // infine, associa l'ID dell'allegato all'ID del post
            $success = set_post_thumbnail($post_id, $attachmentId);
            add_post_meta( $post_id , 'advert_gallery' , set_post_thumbnail($post_id, $attachmentId));
            
            if ($success) {
                echo 'Dati e immagini sono stati inseriti';
            } else {
                echo 'Qualcosa è andato storto';
            }
        }
        wp_die();
    }
}
ubaid ismail
ubaid ismail
11
Commenti

Come stai definendo il $user_id_get - dov'è il codice per quello? E dove viene eseguito il codice del tuo plugin - su quale pagina (una pagina di amministrazione?) e il codice è in una funzione agganciata a qualche hook - se sì, quale hook è?

Sally CJ Sally CJ
18 giu 2022 15:19:53

In realtà, è un invio di modulo che ottiene l'ID utente dell'utente selezionato. Non sto usando alcun hook. Viene eseguito sull'invio del form via ajax. @SallyCJ

ubaid ismail ubaid ismail
18 giu 2022 16:06:00

Come funziona l'invio - il form, via AJAX, invia alla stessa pagina, a un file PHP personalizzato come example.com/process.php, o al file admin-ajax.php? E sospettavo che l'autore del post non fosse impostato, quindi prova var_dump( get_post_field( 'post_author', $post_id ), $user_id_get ); subito dopo la chiamata a wp_insert_post(). Qual è l'output del dump?

Sally CJ Sally CJ
18 giu 2022 16:49:11

Il modulo viene inviato tramite wp-ajax.php e il post viene assegnato correttamente all'autore perché ho monitorato i post di ogni utente tramite get_userdata(user_id) e ha lo stesso post che ho assegnato a quell'utente.

ubaid ismail ubaid ismail
18 giu 2022 18:50:31

"il post è assegnato correttamente all'autore" - sei sicuro che sia assegnato a $user_id_get? Potresti semplicemente fare var_dump() e vedere cosa restituisce? E se i valori sono corretti, allora forse dovresti provare a disattivare i plugin e/o passare a un tema predefinito (es. 2021), e vedere se questo aiuta.

Sally CJ Sally CJ
19 giu 2022 08:02:56

Ho eseguito var_dump() e mostra correttamente l'ID dell'utente, ma ho provato a disattivare i plugin e cambiare tema e comunque non ho trovato nulla.

ubaid ismail ubaid ismail
19 giu 2022 11:16:12

Quando hai detto "pagina degli autori", intendevi le pagine predefinite "author" come example.com/author/admin, giusto? Inoltre, hai considerato di usare la REST API invece? (Per creare il post CPT) E hai detto "Il form viene inviato via wp-ajax.php", ma cos'è wp-ajax.php? Intendevi l'hook wp_ajax_? Se è così, puoi mostrare il tuo codice di callback completo?

Sally CJ Sally CJ
19 giu 2022 14:05:10

Sì, ho modificato il codice sopra, per favore controlla.

ubaid ismail ubaid ismail
19 giu 2022 15:38:14

In realtà, il problema è che il post non viene inserito nel database finché non clicco manualmente il pulsante di aggiornamento nella schermata di modifica del post.

ubaid ismail ubaid ismail
20 giu 2022 00:20:57

Beh, ora mi sto confondendo... ma quello che posso suggerire è, abilita WP_Error, cioè imposta il secondo parametro per wp_insert_post() a true - $post_id = wp_insert_post($advert_posts, true); - e poi subito sotto/dopo, fai qualcosa come if ( is_wp_error( $post_id ) ) { echo 'post non creato: ' . $post_id->get_error_message(); continue; }. Questo ti aiuterà a confermare se il post viene inserito correttamente nel database o no. Inoltre nota che i CPT di default non sono inclusi nella query principale nelle pagine "author", ma immagino che tu abbia già gestito questo aspetto?

Sally CJ Sally CJ
20 giu 2022 16:22:39

E dove si trova il form in questione - è nella schermata di modifica del post o in una pagina admin personalizzata? Come stai aggiungendo il form (quali hook usati, se ce ne sono), o ti riferivi in realtà al form di modifica del post - e se è così, è l'editor classico o l'editor a blocchi/Gutenberg? E come viene attivato l'AJAX - automaticamente (in background) o tramite un click su un pulsante, o?

Sally CJ Sally CJ
20 giu 2022 16:25:37

Problema risolto c'è un campo metabox obbligatorio da compilare per aggiungere il post nel database.

ubaid ismail ubaid ismail
21 giu 2022 15:09:37
Mostra i restanti 7 commenti