J'essaie d'insérer des publications à l'aide d'un travail cron, mais je continue à courir dans des erreurs où WP ne contient pas de fonctions (is_user_logged_in
, wp_get_current_user
).
Existe-t-il un moyen approprié d'exécuter wp_insert_post à l'aide d'un travail cron?
C'est le code que j'ai jusqu'à présent.
phrets_hourly
est le hook WP_CRON
add_action('phrets_hourly', 'run_listings_update' );
function run_listings_update(){
$fetch = new Fetcher();
$fetch->fetch();
}
C'est le code à l'intérieur de l'objet $fetch
(classe Fetcher) qui est exécuté.
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);
}
}
C'est la méthode appelée à partir de l'objet $listing
(classe Listing) qui place les données dans la base de données.
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;
}
Merci!
Pour ceux qui tombent dessus plus tard, utilisez l’option 1 ou 2 trouvée ici: https://core.trac.wordpress.org/ticket/19373 .
"Pour les autres développeurs qui rencontrent ce problème et qui doivent y remédier, l'une ou l'autre de ces deux options fonctionne: appelez wp_set_post_terms () pour ajouter vos taxonomies après avoir appelé wp_insert_post (), configurez un" utilisateur actuel "dans votre script avant d'appeler wp_insert_post (). ”
J'ai trouvé un moyen de contourner celui-ci.
Cela ne donne aucun sens au trac de base et il n’a toujours pas été corrigé, même s’il s’agit d’un ticket vieux de 4 ans. Voici le code que j'ai utilisé pour insérer un message personnalisé. La directiveinclude_onceest importante ici.
Je dois également noter que lewp_set_auth_cookie (1)définit les droits d'accès de ce script à l'administrateur. Si vous n'utilisez pas l'ID 1 pour votre administrateur, vous devrez le mettre à jour. La fonction est également obsolète, vous devez donc inclure le fichier 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;
}
Changez simplementcarspour le type de message que vous voulez. Leslug/titledevra également être modifié en conséquence.