WP Cron и wp_insert_post

Я пытаюсь вставить сообщения, используя задание cron, но я постоянно сталкиваюсь с ошибками, когда WP не хватает функций ( is_user_logged_in , wp_get_current_user ).

Есть ли способ запустить wp_insert_post с помощью задания cron?

Это код, который у меня есть до сих пор.

phrets_hourly – это WP_CRON-hook

 add_action('phrets_hourly', 'run_listings_update' ); function run_listings_update(){ $fetch = new Fetcher(); $fetch->fetch(); } 

Это код внутри объекта $fetch (класс Fetcher), который запускается.

 public function fetch(){ $options['class'] = 'RES'; $options['limit'] = 10; $options['offset'] = 0; $options['silent'] = true; $data = $this->query( $options ); foreach ( $data as $datum ) { $this->place( $datum, true ); } } public function place( $data, $silent ){ $rets = $this->connect_to_rets(); $listing = new Listing( $data ); // check to see if listing already exists $post_id = $listing->check_listing_exists( $data['MST_MLS_NUMBER'] ); if ( ! $post_id ) { $action = $listing->put(); } else { $action = $listing->update($post_id); } } 

Это метод, вызванный из объекта $listing (класс листинга), который помещает данные в базу данных

 public function put(){ $title = $this->create_title( $this->data ); // setup the 'post' data $post = array( 'post_type' => 'listing', 'post_title' => $title, 'post_content' => $this->data['Remarks'], 'post_status' => 'publish' ); // add new meta data if ( ! is_wp_error( $post_id ) ) { $this->add_meta_data( $post_id ); $this->assign_community( $post_id, $data ); } // set the action $action = 'inserted'; return $action; } 

Благодаря!

Solutions Collecting From Web of "WP Cron и wp_insert_post"

Для тех, кто наткнется на это позже, используйте вариант 1 или 2, который можно найти здесь: https://core.trac.wordpress.org/ticket/19373 .

«Для других разработчиков, которые сталкиваются с этим и должны их обойти, работает один из этих двух вариантов: вызовите wp_set_post_terms (), чтобы добавить ваши таксономии после вызова wp_insert_post (), настроенного« текущим пользователем »в вашем скрипте перед вызовом wp_insert_post () »

Я нашел способ обойти этот.

Не мог понять основной трейс, и он все еще не был исправлен, хотя это билет за 4 года. Вот код, который я использовал для вставки персонализированного сообщения. Здесь важна директива include_once .

Следует также отметить, что wp_set_auth_cookie (1) устанавливает права доступа для этого скрипта администратору. Если вы не используете идентификатор 1 для своего администратора, вам необходимо его обновить. Функция также устарела, поэтому вам нужно включить файл pluggable.php .

 //Add in the pluggable functions include_once( ABSPATH . WPINC . '/pluggable.php' ); wp_set_auth_cookie( 1 ); $slug = strtolower("test-example"); $title = "Test Example"; //See if post exists or not then handle accordingly $post_id = get_page_by_title( $title, OBJECT, 'cars' ); if( $post_id == NULL ) { $post_id = wp_insert_post( array( 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_author' => 1, 'post_name' => $slug, 'post_title' => $title, 'post_status' => 'publish', 'post_type' => 'cars' ) ); } else { $post_id = $post_id->ID; } 

Просто замените автомобили на любой тип сообщения, который вы хотите. Также будет необходимо соответствующим образом изменить название / название .