问题描述
我一直在浏览 google 的解决方案。我正在为 log-in 访问者编写一个自定义帖子类型的插件。我最初写了一个没有自定义帖子类型的 mock-up,然后我从 google 搜索到这里,看到一个截图,显示了一个自定义帖子类型的示例来存储有关律师的信息。它表明有人重新设计了”add new” /”edit” 页面,为自定义帖子类型提供了全新的界面。
我想知道如果 wordpress @ stackexchange 将有任何资源重新设计自定义帖子类型”add/edit” 页面。
我不记得我找到那篇文章的搜索字词。
谢谢,-Zack
最佳解决方案
你所提到的问题/答案是 Tips for using WordPress as a CMS 。
该答案中发布的截图是使用可用于自定义帖子类型的 register_meta_box_cb
参数创建的。
register_meta_box_cb 必须指定包含元框代码的回调函数。
要创建元框,您可以使用内置在 add_meta_box function 中的 WordPress,它还需要一个功能来保存输入的数据。
以下是我创建的一些示例代码,用于向我的个人网站上使用的投资组合信息类型添加 2 个自定义元框。
我创建的”Projects” 帖子类型包含此参数:
'register_meta_box_cb' => 'c3m_project_meta',
下面的第一个功能是 register_meta_box_cb 的回叫功能。以下 2 输出添加帖子中的元框的 HTML,最后 2 个保存输入的数据。
function c3m_project_meta() {
add_meta_box('_c3m_project_url', __('Enter Website Url') , 'c3m_project_url', 'project', 'side', 'low');
add_meta_box('_c3m_project_work', __('Enter Work Done on Project') , 'c3m_project_work', 'project', 'side', 'low');
}
function c3m_project_url($post) {
global $post;
echo '<input type="hidden" name="banner-buttonmeta_noncename" id="banner-buttonmeta_noncename" value="' .
wp_create_nonce( plugin_basename(__FILE__) ) . '" />';
$projecturl = get_post_meta($post->ID, '_projecturl', true);
echo '<input type="text" name="_projecturl" value="' . $projecturl . '" class="widefat" />' ;
}
function c3m_project_work($post) {
global $post;
echo '<input type="hidden" name="banner-buttonmeta_noncename" id="banner-buttonmeta_noncename" value="' .
wp_create_nonce( plugin_basename(__FILE__) ) . '" />';
$projectwork = get_post_meta($post->ID, '_projectwork', true);
echo '<input type="text" name="_projectwork" value="' . $projectwork . '" class="widefat" />' ;
}
add_action('admin_init', 'c3m_project_meta');
function c3m_save_project_meta( $post_id , $post ) {
if ( !wp_verify_nonce( $_POST [ 'banner-buttonmeta_noncename' ], plugin_basename( __FILE__ ) )) { return $post ->ID;
}
if ( !current_user_can( 'edit_post' , $post ->ID )) return $post ->ID;
$c3m_projecturl [ '_projecturl' ] = $_POST [ '_projecturl' ];
foreach ( $c3m_projecturl as $key => $value ) {
if ( $post ->post_type == 'revision' ) return ;
$value = implode( ',' , ( array ) $value );
if (get_post_meta( $post ->ID, $key , FALSE)) {
update_post_meta( $post ->ID, $key , $value ); } else {
add_post_meta( $post ->ID, $key , $value ); } if (! $value ) delete_post_meta( $post ->ID, $key );
}
$c3m_projectwork [ '_projectwork' ] = $_POST [ '_projectwork' ];
foreach ( $c3m_projectwork as $key => $value ) {
if ( $post ->post_type == 'revision' ) return ;
$value = implode( ',' , ( array ) $value );
if (get_post_meta( $post ->ID, $key , FALSE)) {
update_post_meta( $post ->ID, $key , $value ); } else {
add_post_meta( $post ->ID, $key , $value ); } if (! $value ) delete_post_meta( $post ->ID, $key );
}
}
add_action( 'save_post' , 'c3m_save_project_meta' , 1, 2);
次佳解决方案
当我在研究同样的事情时,我发现这篇文章很有趣:
How to Create A Custom WordPress Meta Box Instead of Using WordPress Custom Fields
Learning how to create custom WordPress meta boxes allow you to make professional UI elements for yourself and your clients. This WordPress meta box tutorial will show you how to add admin UI elements to the edit post/page screens.
克里斯是正确的钱,虽然额外的资源没有伤害:)
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。