Create post programmatically

时间:2015-03-27 作者:Allex

我想创建一个视频库插件。我正在使用此代码创建帖子:

global $user_ID;
$new_post = array(
    \'post_title\'    => \'chapter1\',
    \'post_content\'  => \'Lorem ipsum dolor sit amet...\',
    \'post_status\'   => \'publish\',
    \'post_date\'     => date( \'Y-m-d H:i:s\' ),
    \'post_author\'   => $user_ID,
    \'post_type\'     => \'post\',
    \'post_category\' => array(0)
);
$post_id = wp_insert_post( $new_post );
它工作得很好,但问题是创建的帖子显示在管理仪表板的“所有帖子”面板中;我不想在那里或最新的帖子中显示以编程方式创建的帖子。

我有什么办法可以做到这一点吗?我试图更改帖子类型,但生成的帖子链接给了我一个页面未找到错误。

2 个回复
SO网友:erichmond

创建自定义帖子类型不是一个选项吗?

\'post_type\' => \'custom_post_type\'
然后只需在UI中隐藏自定义帖子类型

看见Possible to hide Custom Post Type UI/Menu from specific User Roles?

SO网友:jimihenrik

Edit: 我原以为这很简单,但似乎我还不够胜任。

您可以通过添加任意类别(如my_prog_cat_to_hide) 对于这些以编程方式添加的帖子,然后在管理列表中过滤掉它们。

function wpse182434_get_category_id($cat_name){
    $term = get_term_by(\'name\', $cat_name, \'category\');
    return $term->term_id;
}

function wpse182434_filter_admin_query( $query ) {
    if(is_admin() && $query->is_main_query() && !filter_input(INPUT_GET, \'post_status\') && ( $screen = get_current_screen() ) instanceof \\WP_Screen && \'edit-post\' === $screen->id) {
        $query->set( \'cat\', \'-\'.wpse182434_get_category_id(\'my_prog_cat_to_hide\') );
    }
}
add_action( \'pre_get_posts\', \'wpse182434_filter_admin_query\' );
当然,这会让你处理一些事情,比如在前端和/或提要中不显示该类别,等等。

因为wpse182434_filter_admin_query if条件是,如果您从顶部选择“已发布”或“所有帖子”以外的任何其他过滤器,您仍然可以看到文章。它们只是在所有帖子列表中筛选出来的。

所有这些都在你的函数中。当然是php。

结束

相关推荐