问题描述
用例:
我有一个与音乐表演有关的职位类型。 ‘show time’ 通过后期发布日期被抓住,该日期设置在将来的一段时间。我发现了一个功能,可以使用未来的日志博客帖子并留下日期,但标记的帖子是保存时发布的,但无法确定如何为自定义帖子类型进行自定义。
功能如下。
<?php
function setup_future_hook() {
// Replace native future_post function with replacement
remove_action('future_post','show', '_future_post_hook');
add_action('future_post', 'show', 'publish_future_post_now');
}
function publish_future_post_now($id) {
// Set new post's post_status to "publish" rather than "future."
wp_publish_post($id);
}
add_action('init', 'setup_future_hook');
?>
最佳解决方案
令人惊讶的是,结合了 Mike 和 Jan 的答案,我想出了这个只适用于所讨论的帖子类型的内容。我们不需要显示的条件,因为’future_show’ 钩只抓住显示的类型和更新。
<?php
function setup_future_hook() {
// Replace native future_post function with replacement
remove_action('future_show','_future_post_hook');
add_action('future_show','publish_future_post_now');
}
function publish_future_post_now($id) {
wp_publish_post($id);
}
add_action('init', 'setup_future_hook');
?>
次佳解决方案
我无法确定,因为我没有您的网站进行测试,但我相信您只需要从 remove_action()
和 add_action()
调用中删除'show'
。 wp_publish_post()
函数对于 post 类型是不可知的,至少这是从阅读代码看来的。所以试试这个:
<?php
function setup_future_hook() {
// Replace native future_post function with replacement
remove_action('future_post', '_future_post_hook');
add_action('future_post', 'publish_future_post_now');
}
function publish_future_post_now($id) {
// Set new post's post_status to "publish" rather than "future."
wp_publish_post($id);
}
add_action('init', 'setup_future_hook');
?>
当然,如果你想限制只做表演,你可能想做这样的事情 (虽然逻辑会更复杂,如果你需要它与其他职位类型):
function publish_future_post_now($id) {
$post = get_post($id);
if ('show' == $post->post_type)
wp_publish_post($id);
}
希望这可以帮助?
第三种解决方案
我认为这个动作被 wp_transition_post_status
调用。代码是:
function wp_transition_post_status($new_status, $old_status, $post) {
do_action('transition_post_status', $new_status, $old_status, $post);
do_action("${old_status}_to_$new_status", $post);
do_action("${new_status}_$post->post_type", $post->ID, $post);
}
所以对于正常的未来帖子,最后一个钩子将是 future_post
,但是对于你的类型,它将是 future_show
或者你的类型插件。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。