当计划发布的帖子发布时,Meta Box失去价值

时间:2014-01-22 作者:kel

我创建了一个带有元框的插件,元框中有一个复选框,并注意到当一篇文章从预定(未来)转到发布时,元不再被选中。

当我安排帖子并选中该框时,它将保持保存状态。如果帖子已发布,我选中该框,它将保持选中状态。从“已发布”转到“草稿”可保持复选框处于选中状态。

我不知道我做错了什么。这是我的代码:

add_action(\'add_meta_boxes\', \'add_feature_meta\');

function add_feature_meta() {
    if(current_user_can(\'edit_posts\')) {
        add_meta_box(\'feature_meta_id\', \'Feature this Article?\', \'feature_meta_box\', \'post\', \'side\', \'high\');
    }
}

function feature_meta_box() {
    global $post;
    $feature_data = get_post_meta($post->ID, \'feature_meta_id\', true);
    ?>

        <label for="featured-meta"><input type="checkbox" id="featured-meta" name="feature_meta_id" <?php if($feature_data == \'1\') { echo \'checked\'; } ?>> Make this featured</label>

    <?php
}

function k2_feature_meta_save_details($post_id) {
    global $post;

    if((defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) || (defined(\'DOING_AJAX\') && DOING_AJAX)) {
        return;
    }

    if(isset($_POST[\'feature_meta_id\'])) {
        $feature_data = 1;
    } else {
        $feature_data = 0;
    }

    update_post_meta($post_id, \'feature_meta_id\', $feature_data);

}

add_action(\'save_post\', \'k2_feature_meta_save_details\');

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

我没有测试过这个,但我猜是$_POST 保存帖子时未设置wp_cron 将状态从“Scheduled”更改为“Published”,从而将您的值保存/重置为0。

而不是使用save_post 你可以钓到several transition hooks 适合您的需要。

或者,您可以删除一个或多个似乎有问题的转换的操作。例如:

add_action(
  \'pending_to_publish\',
  function($post) {
    remove_action(\'save_post\', \'k2_feature_meta_save_details\');
  }
);
未经测试,但我希望这会有所帮助。

结束

相关推荐

private functions in plugins

我开发了两个插件,其中一个功能相同(相同的名称,相同的功能)。当试图激活两个插件时,Wordpress会抛出一个错误,因为它不允许我以相同的名称定义函数两次。有没有一种方法可以使这个函数只对插件私有,而不使用面向对象编程,也不简单地重命名函数?我不想使用OOP,因为我首先要学习它。此外,我不想重命名该函数,因为我可能也想在其他插件中使用它,而重命名感觉不太合适。