将两个自定义帖子类型合并到一个管理页面中?

时间:2013-09-11 作者:Aaron

我正在建立一个网站与4个自定义的职位类型。为了让我们的客户/管理员更轻松,我想知道是否有办法将这些自定义帖子类型合并到后端的一个列表中?比如,如果您查看包含帖子列表和列的普通后端管理页面,那么这样的页面是否可以引入其他3种帖子类型以便于排序/搜索?

我不能将CPT组合成一个,如果可能的话,它们必须在管理区域的一个“查看”页面之外保持分离。

有什么想法吗??或者甚至从哪里开始寻找/思考如何发展这一点?

3 个回复
SO网友:brasofilo

这只是一个起点,因为在进一步开发过程中肯定会出现问题。例如,现在,搜索功能中断,因为它需要一个字符串(post\\u类型)并且它正在接收一个数组。

要在Posts屏幕中列出多个post类型,我们将pre_get_posts 并修改查询。在此测试中,帖子、页面和产品将一起显示在帖子屏幕中(http://example.com/wp-admin/edit.php).

add_action( \'pre_get_posts\', \'join_cpt_list_wspe_113808\' );

function join_cpt_list_wspe_113808( $query ) 
{
    // If not backend, bail out
    if( !is_admin() )
        return $query;

    // Detect current page and list of CPTs to be shown in Dashboard > Posts > Edit screen
    global $pagenow;
    $cpts = array( \'post\', \'page\', \'product\' );

    if( \'edit.php\' == $pagenow && ( get_query_var(\'post_type\') && \'post\' == get_query_var(\'post_type\') ) )
        $query->set( \'post_type\', $cpts );

    return $query;
}
用于显示具有每个帖子类型的列的帮助程序代码:

add_filter( \'manage_edit-post_columns\', \'add_cpt_column_wspe_113808\' );
foreach( array( \'post\', \'page\', \'product\' ) as $cpt )
    add_action( "manage_{$cpt}_posts_custom_column", \'show_cpt_column_wspe_113808\', 10, 2 );

function add_cpt_column_wspe_113808( $columns ) 
{
    $columns[ \'cpt\' ] = \'Post Type\';
    return $columns;
}

function show_cpt_column_wspe_113808( $column_name, $post_id ) 
{
    if ( \'cpt\' != $column_name )
        return;
    echo get_post_type( $post_id );
}

SO网友:Mireck

对于仍然关注这个问题的人来说,brasofilo的解决方案很好,但有些功能无法工作(搜索、每页帖子数、批量操作等)。解决方案:而不是pre_get_posts 您应该通过挂接到来修改sql查询posts_where. 下面是为我完成这项工作的代码示例:

add_filter( \'posts_where\', \'mirmic_search_where\' );
function mirmic_search_where( $where ) {
    global $pagenow, $wpdb;
    
    if( \'edit.php\' == $pagenow && ( get_query_var(\'post_type\') && \'wszystkieposty\' == get_query_var(\'post_type\') ) ) {
        $stringToReplace = "trnf_posts.post_type = \'wszystkieposty\'";
        $replaceWith = "trnf_posts.post_type IN (\'infobus\', \'infoair\', \'inforail\', \'infotram\', \'infoship\', \'infoair\', \'infobike\')";
        $where = str_replace($stringToReplace, $replaceWith, $where );
    }
    return $where;
}


function mirmic_wszystkieposty_distinct( $where ){
    global $pagenow, $wpdb;

    if ( is_admin() && $pagenow==\'edit.php\' && $_GET[\'post_type\']==\'wszystkieposty\') {
        return "DISTINCT";
    }
    return $where;
}
add_filter( \'posts_distinct\', \'mirmic_wszystkieposty_distinct\' );
显示其他帖子类型的自定义帖子类型的slug为wszystkieposty. 相应地更改它。此行列出了要显示的其他帖子类型:

$replaceWith = "trnf_posts.post_type IN (\'infobus\', \'infoair\', \'inforail\', \'infotram\', \'infoship\', \'infoair\', \'infobike\')";

SO网友:Alex V.

我推荐管理员菜单编辑器专业版。我将在底部链接到它。

有趣的在我正在从事的某个项目中,我有几个相关的CPT(自定义帖子类型)。该部门是“信息中心”,他们希望新闻稿、白皮书、推荐信等在信息中心内。在前端,创建它很容易。在后端,我们希望它在逻辑上也能结合在一起。由于特定的内容(元文件)和布局要求,大多数自定义帖子类型都设置为CPT。我们最终得到了将近20个CPT。

也就是说,我们使用管理编辑器插件从后端菜单中删除相关的信息中心CPT,然后创建一个“信息中心”菜单,其中包含相关的CPT链接。虽然它们看起来是结合在一起的,但事实并非如此。

以下是插件链接:http://adminmenueditor.com/ 也可以尝试演示。

结束

相关推荐

Admin login not working

我无法以管理员身份登录wordpress网站。我试图更改密码和其他一些东西,但没有结果。发生的事情是,我返回到登录页面,没有消息。奇怪的是,我可以作为另一个用户登录,但我没有所需的权限。我检查了PHP日志文件,在那里找不到任何东西。我尝试过以私人模式进行,但也不起作用。建议我应该尝试什么?