publish_post Wird ausgeführt, wenn ein Beitrag veröffentlicht wird oder wenn er bearbeitet wird und sein Status "veröffentlicht" ist. Aktionsfunktionsargumente: Post-ID.
Ich habe den Publish_post-Hook zu einem WordPress-Plugin hinzugefügt, das ich schreibe. Die vom Hook selbst aufgerufene Funktion soll die Kategorien mehrerer Posts mit der Funktion wp_update_post ändern.
Dieser Hook funktioniert jedoch nicht, da das Ergebnis beim Ausführen von wp_update_post immer 0 ist. Ich gehe davon aus, dass das Ausführen von wp_update_post dazu führt, dass eine andere Instanz meines Hooks ausgeführt wird, weil der Beitrag erneut veröffentlicht wird ... was meiner Meinung nach das " bewirkt . ..oder wenn es bearbeitet wird und sein Status "veröffentlicht" " der obigen Aussage ist.
Gibt es einen anderen Action-Hook, den ich verwenden kann, der nur aufgerufen wird, wenn der hinzugefügte Beitrag völlig neu und nicht bearbeitet ist?
<?php
/*
Plugin Name: Category Switcher Plugin
Plugin URI: http://www.example.com
Description: When a new post is created this plugin will cause the
Version: 0.1
Author: Me
License: GPL2
?>
<?php
class categoryShifter {
function shiftCategories($post_ID) {
$maxNumPostsFirstTeir = 4;
$first_teir_cat = "Fresh News Stories 1";
$second_teir_cat = "Slightly Dated Stories 2";
$firephp = FirePHP::getInstance(true);
$firephp->info('BEGIN: categoryShifter.shiftCategories()');
$firephp->log($post_ID, 'post_ID: ');
$firephp->trace('trace to here');
$first_teir_id = categoryShifter::getIDForCategory($first_teir_cat, $firephp);
$second_teir_id = categoryShifter::getIDForCategory($second_teir_cat, $firephp);
$firephp->log($first_teir_id, '$first_teir_id');
$firephp->log($second_teir_id, '$second_teir_id');
$qPostArgs = array(
'numberposts' => 100,
'order' => 'DESC',
'orderby' => 'post_date',
'post_type' => 'post',
'post_status' => 'published',
'category_name' => $first_teir_cat
);
$firstTeirPosts = get_posts($qPostArgs);
$firephp->log($firstTeirPosts, 'got posts:');
$firephp->log(sizeof($firstTeirPosts), 'sizeof');
// NOTE: This appears to work.
for($i = sizeof($firstTeirPosts)-1; $i > $maxNumPostsFirstTeir-4; $i--)
{
$newCats = array($second_teir_id);
$editingId = $firstTeirPosts->ID;
$result = wp_set_post_categories($editingId, $newCats); /* NOTE: Doesn't work presently... returns an array with the $second_teir_id in it. */
$firephp->log($result, 'Result');
}
/*
$my_post = array();
$my_post['ID'] = 132;
$my_post['post_category'] = array($second_teir_id);
$firephp->log('Before', 'Before');
if(wp_update_post( $my_post ) == 0) {
$firephp->Error('Fatal Error, Post not updated', 'error');
}
$firephp->log('After', 'After');
*/
return $post_ID;
}
function getIDForCategory($cat_name, $logger) {
$logger->Info("Begin: getIDForCategory()");
$cats = get_categories();
$whichCatId = "";
foreach($cats as $single_cat) {
if($single_cat->name == $cat_name) {
$whichCatId = $single_cat->term_id;
break;
}
}
$logger->Info("End: getIDForCategory()");
return (int)$whichCatId;
}
}
/* Hook Post Creation */
/* add_action('publish_post', array('categoryShifter','shiftCategories')); */
add_action('wp_insert_post', array('categoryShifter', 'shiftCategories'));
?>
Ich habe vorerst auf die Verwendung des Hooks wp_insert_post umgestellt ... aber ich kann die Funktion wp_set_post_categories immer noch nicht zum Ändern der Kategorien der Posts verwenden.
Ich verstehe, dass ich diesen Code wahrscheinlich aktualisieren muss, damit er die vorhandenen Kategorien des Beitrags berücksichtigt und nur die vom Plugin angegebenen ändert, aber im Moment ist es wirklich nur ein Alpha.