Publish_post Chạy khi bài đăng được xuất bản hoặc nếu nó được chỉnh sửa và trạng thái của nó là "xuất bản". Đối số chức năng hành động: ID bài.
Tôi đã thêm hook Publish_post vào một plugin WordPress mà tôi đang viết. Hàm được gọi bởi chính hook, có nghĩa là thay đổi danh mục của một số bài đăng bằng cách sử dụng hàm wp_update_post.
Tuy nhiên, hook này không hoạt động vì kết quả được trả về từ việc chạy wp_update_post luôn là 0. Tôi đoán tốt nhất là việc chạy wp_update_post khiến một phiên bản hook khác của tôi chạy vì nó xuất bản lại bài đăng ... mà tôi tin là mang lại ". .. hoặc nếu nó được chỉnh sửa và trạng thái của nó là "xuất bản" " của tuyên bố trên.
Có bất kỳ hook hành động nào khác mà tôi có thể sử dụng sẽ chỉ được gọi khi bài đăng được thêm hoàn toàn mới và không được chỉnh sửa không?
<?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'));
?>
Tôi đã chuyển sang sử dụng hook wp_insert_post trong thời gian này ... nhưng tôi vẫn không thể có được hàm wp_set_post_clists để thay đổi danh mục của bài viết.
Tôi hiểu rằng có lẽ tôi sẽ cần cập nhật mã này để nó tính đến các danh mục hiện có của bài đăng và chỉ sửa đổi các mục được chỉ định bởi plugin, nhưng bây giờ nó thực sự chỉ là một bản alpha.