RW Meta Box,设置帖子标题时出现问题

时间:2013-07-16 作者:Junaid Qadir Shekhanzai

我正在使用RW_Meta_Box 插件依据Rilwis.

我正在使用CPT,添加了一个自定义元框,并删除了titleeditor.

但我还是想确定标题,原因很明显。

我创建了CPT和meta box,一切都很好,包括all posts 页面使用custom column 挂钩。

当我坐下来为元框中的一个字段设置帖子标题时,我没有得到想要的结果。我试图通过搜索此Q&;来找到我选择的解决方案;一个站点。

最初我尝试:

SOLUTION1:

add_action(\'submitpost_box\', \'hidden_type_title\');

function hidden_type_title() {
    global $current_user, $post, $post_type;
    global $prefix;
    $md = rwmb_meta($prefix . \'name\', array(\'type\' => \'text\'), $post->ID);
    if ($post->post_type == \'MY_CPT_NAME\') {
    ?>
    <input type="hidden" name="post_title" value="<?php echo esc_attr(htmlspecialchars($md)); ?>" id="title" />
    <?php
    } else {
    return;
    }
}
上面的代码工作正常,但有一个我无法检测到的问题。也就是说,我需要更新两次帖子才能设置帖子标题。

因此,我继续尝试save_post 像这样钩住:

SOLUTION2:

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

function post_updated($post_id) {
    global $current_user, $post;
    if ($post->post_type != \'MY_CPT_NAME\') {
    return;
    }

    global $prefix;
    $md = rwmb_meta($prefix . \'name\', array(\'type\' => \'text\'), $post_id);
    // verify post is not a revision & not an autosave
    if (!wp_is_post_revision($post_id) && !(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)) {
    // set the new post title
    $post->ID = $post_id;
    $post->post_title = $md;

    // update the post, removing the action to prevent an infinite loop
    remove_action(\'save_post\', \'post_updated\');
    wp_update_post($post);
    add_action(\'save_post\', \'post_updated\');
    return;
    }
}
现在,我的处境更糟了,帖子标题立即设置好了,但我的元框数据不知何故没有被保存。

第一个解决方案可能有什么问题?

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

这里有一个利用Rilwis动作钩的解决方案。。。因此,您可以从他的临时支票中获利,而无需添加您自己的支票。

add_action(\'rwmb_after_save_post\', \'post_updated\');

function post_updated($post_id) {

    // verify post is not a revision & not an autosave
    if (!wp_is_post_revision($post_id) && !(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)) {

    global $prefix;
    $prefix . \'name\';

    // check that the custom field is being POSTED 

    if( isset( $_POST[$prefix . \'name\'] ) ){    
        $my_post = array();
        $my_post[\'ID\'] = $post_id;
        $my_post[\'post_title\'] = sanitize_title( $_POST[$prefix . \'name\'] );

        // Update the post into the database
        wp_update_post( $my_post );   

        }

    }
}
要将此函数限制为仅针对特定的metabox运行,可以使用add_action 而是:

add_action("rwmb_{$meta_box[\'id\']}_after_save_post", \'post_updated\');
没有看到您的metabox定义,我不知道要将ID更改为什么,因此您必须这样做。

NB:未经测试,但我认为很接近。请参见wp_update_post() 在codex中介绍了该函数的工作原理。

结束

相关推荐

Option_active_plugins筛选器不起作用

我为option\\u active\\u插件添加了一个过滤器,以防止大多数插件加载到管理页面上。确认位于正确的页面上,并返回经过适当修改的数组,但这对页面上包含的插件没有影响。尝试使用高数字作为筛选器优先级。无影响。有什么想法吗?