Post inserat programatic în WordPress nu apare în profilul autorului

18 iun. 2022, 14:17:53
Vizualizări: 74
Voturi: 1

Am inserat un post programatic în WordPress. Când vizualizez postarea pe pagina autorului, postarea inserată programatic nu apare, dar după ce actualizez manual postul, funcționează și se afișează corect. Care ar fi cauza și cum pot rezolva această problemă? Există vreun ghid?

Codul din plugin-ul meu:

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);
          
            // setare meta pentru galerie
            $attachment = array(
                'post_mime_type' => $wpFileType['type'],  // tipul fișierului
                'post_title' => sanitize_file_name($imageFile),  // sanitizare și utilizare nume imagine ca nume fișier
                'post_content' => '',  // poți folosi descrierea imaginii aici ca conținut
                'post_status' => 'inherit'
            );
            $attachmentId = wp_insert_attachment($attachment, $imageFile, $post_id);

            // generare și returnare metadate atașament
            $attachmentData = wp_generate_attachment_metadata($attachmentId, $imageFile);

            // actualizare și returnare metadate atașament
            wp_update_attachment_metadata($attachmentId, $attachmentData);
            // asociere ID atașament la ID post
            $success = set_post_thumbnail($post_id, $attachmentId);
            add_post_meta( $post_id , 'advert_gallery' , set_post_thumbnail($post_id, $attachmentId));
            
            if ($success) {
                echo 'Datele și imaginile au fost inserate';
            } else {
                echo 'Ceva nu a funcționat corect';
            }
        }
        wp_die();
    }
}
ubaid ismail
ubaid ismail
11
Comentarii

Cum definești variabila $user_id_get - unde este codul pentru asta? Și unde rulează codul pluginului tău - pe ce pagină (o pagină de administrare?) și este codul într-o funcție legată de vreun hook - dacă da, ce hook este?

Sally CJ Sally CJ
18 iun. 2022 15:19:53

De fapt, este o trimitere de formular care obține ID-ul utilizatorului marcat. Nu folosesc niciun hook. Rulează la trimiterea formularului prin AJAX. @SallyCJ

ubaid ismail ubaid ismail
18 iun. 2022 16:06:00

Cum funcționează trimiterea - formularul, prin AJAX, trimite către aceeași pagină, un fișier PHP personalizat precum example.com/process.php, sau fișierul admin-ajax.php? Și am bănuit că autorul postării nu este setat, așa că încearcă var_dump( get_post_field( 'post_author', $post_id ), $user_id_get ); imediat după apelul către wp_insert_post(). Care este rezultatul dump-ului?

Sally CJ Sally CJ
18 iun. 2022 16:49:11

Formularul este trimis prin wp-ajax.php și postarea este atribuită corect autorului deoarece am urmărit postările fiecărui utilizator prin get_userdata(user_id). și are aceeași postare pe care am atribuit-o acelui utilizator.

ubaid ismail ubaid ismail
18 iun. 2022 18:50:31

"postarea este atribuită corect autorului" - ești sigur că este atribuită la $user_id_get? Poți să faci un simplu var_dump() și să vezi ce afișează? Și dacă valorile sunt corecte, atunci poate ar trebui să încerci să dezactivezi pluginurile și/sau să treci la o temă implicită (de ex. 2021), și să vezi dacă ajută.

Sally CJ Sally CJ
19 iun. 2022 08:02:56

Am rulat var_dump() și afișează corect ID-ul utilizatorului, dar am încercat să dezactivez pluginurile și să schimb tema și tot nu am găsit nimic.

ubaid ismail ubaid ismail
19 iun. 2022 11:16:12

Când ai spus "pagina autorilor", te refereai la paginile implicite "autor" precum example.com/author/admin, corect? De asemenea, ai luat în considerare folosirea API-ului REST în schimb? (Pentru a crea postul CPT) Și ai spus "Formularul se trimite prin wp-ajax.php", dar ce este wp-ajax.php? Te-ai referit la hook-ul wp_ajax_? Dacă da, poți arăta întregul cod de callback?

Sally CJ Sally CJ
19 iun. 2022 14:05:10

Da, am editat codul de mai sus, te rog verifică.

ubaid ismail ubaid ismail
19 iun. 2022 15:38:14

De fapt, problema este că postarea nu este introdusă în baza de date până când nu apăs manual butonul de actualizare pe ecranul de editare al postării.

ubaid ismail ubaid ismail
20 iun. 2022 00:20:57

Ei bine, acum devin confuz... dar ce pot sugera este să activezi WP_Error, adică să setezi al doilea parametru pentru wp_insert_post() la true - $post_id = wp_insert_post($advert_posts, true); - și apoi chiar sub/după aceea, fă ceva de genul if ( is_wp_error( $post_id ) ) { echo 'postarea nu a fost creată: ' . $post_id->get_error_message(); continue; }. Asta te va ajuta să confirmi dacă postarea este inserată cu succes în baza de date sau nu. De asemenea, reține că CPT-urile nu sunt incluse implicit în interogarea principală pe paginile "autor", dar presupun că deja ai rezolvat asta?

Sally CJ Sally CJ
20 iun. 2022 16:22:39

Și unde este formularul în discuție - este pe ecranul de editare a postării sau pe o pagină de administrare personalizată? Cum adaugi formularul (ce hook-uri folosești, dacă folosești), sau te referai de fapt la formularul de editare a postării - și dacă da, este vorba despre editorul clasic sau despre editorul block/Gutenberg? Și cum este declanșat AJAX-ul - automat (în fundal) sau prin apăsarea unui buton, sau?

Sally CJ Sally CJ
20 iun. 2022 16:25:37

Problema a fost rezolvată, există un câmp metabox care trebuie completat obligatoriu pentru a adăuga postarea în baza de date.

ubaid ismail ubaid ismail
21 iun. 2022 15:09:37
Arată celelalte 7 comentarii