微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – WordPress:自定义帖子类型,发送数据到“register_meta_box_cb”Arg

我正在向WordPress网站添加多个自定义帖子类型,我正在尝试使用变量和合并函数来优化代码.我能够将2个变量发送到用于register_post_type的create_rma_project_post_type函数.我想对附加元数据创建函数的参数做同样的事情.下面的第一个代码完全有效.它使用register_Meta_Box_cb来调用add_project_MetaBoxes:

add_action('init', create_rma_project_post_type('project','our-people'));
function create_rma_project_post_type($post_type,$display_page) {
    $prefix = 'rma';
    $post_label = ucfirst($post_type);

    register_post_type($prefix.'_'.$post_type,
        array(
            'labels' => array(
                'name' => __( $post_label.'s' ),
                'singular_name' => __( $post_label ),
                'all_items' => __( $post_label.' List' ),
                'add_new' => __( 'Add New '.$post_label),
                'add_new_item' => __( 'Add New '.$post_label),
                'edit_item' => __( 'Edit '.$post_label),
                'new_item' => __( 'New '.$post_label),
                'view_item' => __( 'View '.$post_label),
                'search_items' => __( 'Search'),
                'parent_item_colon' => 'about-us/'.$display_page,
            ),
            'public' => true,
            'has_archive' => false,
            'rewrite' => array('slug' => 'about-us/'.$display_page,'with_front' => false),
            'supports' => array('title','editor','thumbnail'),
            'register_Meta_Box_cb' => 'add_project_MetaBoxes',
        )
    );
}

function add_project_MetaBoxes() {
    add_Meta_Box('rma_project_MetaBox_information', 'Project information', 'rma_project_MetaBox_information_callback', 'rma_project', 'normal', 'default');
}

我想要做的是更改元变量调用以发送变量,目标是能够从函数删除“项目”单词,并将一个函数用于所有自定义帖子类型.

这就是我要阅读的内容

            'register_Meta_Box_cb' => add_project_MetaBoxes($post_type),

当我这样做时,它不起作用.这些都没有:

            'register_Meta_Box_cb' => 'add_project_MetaBoxes($post_type)',
            'register_Meta_Box_cb' => function(add_project_MetaBoxes($post_type)),
            'register_Meta_Box_cb' => function('add_project_MetaBoxes($post_type)'),
            'register_Meta_Box_cb' => sprintf( __('add_project_MetaBoxes(%s)'), $post_type ),

我的第一个问题是,目前这可能与wordpress有关吗?如果是的话,我该怎么做?感谢任何帮助,如果您需要澄清任何问题,请告诉我.

编辑2017

使用这个和其他答案,我创建了一组帮助程序类,使CTP更易于管理.如果您想查看成品,请参阅:

https://gist.github.com/Kelderic/dc641aced67f0c0cb0a4a1ded17fa0d4

解决方法:

register_Meta_Box_cb回调有一个输入参数,即当前编辑的帖子的WP_Post对象.

所以我认为你应该能够通过使用get_post_type()wordpress函数从该对象获取post类型.

如果您查看了source code的register_post_type(),您会发现它包含以下部分:

 if ( $args->register_Meta_Box_cb )
     add_action( 'add_Meta_Boxes_' . $post_type, $args->register_Meta_Box_cb, 10, 1 );

所以尝试替换:

'register_Meta_Box_cb' => 'add_project_MetaBoxes',

有:

'register_Meta_Box_cb' => 'custom_add_MetaBoxes',

哪里:

function custom_add_MetaBoxes( $post )
{

    // get the current post type
    $post_type = get_post_type( $post );

    // your logic for the add_Meta_Box code
    // ...

}

包含基于当前帖子类型的逻辑.

更新:

is a way to store/associate an array of data to a custom post type?

a)是的,您可以使用update_post_meta()存储与给定$post_id的自定义帖子类型相关联的数据:

update_post_Meta( $post_id, $Meta_key, $Meta_value );

其中$Meta_value可以是字符串或数组.例如:

update_post_Meta( 38, 'my_data', array( 'somekey' => 'somevalue' ) );

获取数组数据,可以使用get_post_meta()

$data = get_post_meta( 38, 'my_data', FALSE );

b)如果你想存储一些与给定自定义帖子类型中的所有帖子相关的数据数组,你可以使用update_option()来存储它,使用get_option()获取它.

例如,您可以使用:

$data = array( 
              'cpt1' => array( 'somekey1' => 'somevalue1' ),
              'cpt2' => array( 'somekey2' => 'somevalue2' ),
);

update_option( 'my_data', $data );

存储$data数组和

$data = get_option( 'my_data' );

拿回来

希望这有帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐