管理面板中Wordpress Post Array的奇怪问题

时间:2012-10-09 21:47:27

标签: php wordpress custom-post-type meta-boxes

对于我正在为客户构建的Wordpress网站上的Post Array问题,我感到非常困惑。我希望有人见过这个!

我已注册自定义帖子类型:

register_post_type( 'products', array(
    'labels' => array(
        'name' => __( 'Products' ),
        'singular_name' => __( 'Product' ),
    ),
    'public' => true,
    'menu_position' => 20,
    'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail', 'comments', ),
    'taxonomies' => array('category'),
    'capability_type' => 'post',
    'rewrite' => array( 'slug' => 'products','with_front' => TRUE),
    'register_meta_box_cb' => 'product_page_meta_box'
));

我在其中注册了以下元框的回调:

function product_page_meta_box() {
    add_meta_box('product_meta_box_content', 'Product Specifications',  'product_meta_box_content', 'products');
}

function product_meta_box_content( $post ) {

    wp_nonce_field( plugin_basename( __FILE__ ), 'product_noonce' );

    echo '<div class="inside>';
        var_dump($post);
        echo '<p>Please detail the product specifics here:</p>';
    echo '</div>';
}

我感到沮丧的是,管理页面上面var_dump的结果是:

string(3) "258" ["post_author"]=> string(1) "1" ["post_date"]=> string(19) "2012-08-27 19:33:30" ["post_date_gmt"]=> string(19) "2012-08-27 19:33:30" ["post_content"]=> string(0) "" ["post_title"]=> string(10) "The Wensum" ["post_excerpt"]=> string(20) "Testing the excerpt!" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(6) "closed" ["ping_status"]=> string(6) "closed" ["post_password"]=> string(0) "" ["post_name"]=> string(22) "large-6-perch-dovecote" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2012-10-04 16:50:19" ["post_modified_gmt"]=> string(19) "2012-10-04 16:50:19" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> string(1) "0" ["guid"]=> string(53) "http://dovecotes.local//?post_type=products&p=258" ["menu_order"]=> string(1) "0" ["post_type"]=> string(8) "products" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["ancestors"]=> array(0) { } ["filter"]=> string(4) "edit" }

在管理区域,它没有类型,完全无效;虽然post数组很好,但在有关页面上,ID有一个键,它是一个有效的对象:

object(stdClass)#145 (25) { ["ID"]=> int(258) ["post_author"]=> string(1) "1" ["post_date"]=> string(19) "2012-08-27 19:33:30" ["post_date_gmt"]=> string(19) "2012-08-27 19:33:30" ["post_content"]=> string(0) "" ["post_title"]=> string(10) "The Wensum" ["post_excerpt"]=> string(20) "Testing the excerpt!" ["post_status"]=> string(7) "publish" ["comment_status"]=> string(6) "closed" ["ping_status"]=> string(6) "closed" ["post_password"]=> string(0) "" ["post_name"]=> string(22) "large-6-perch-dovecote" ["to_ping"]=> string(0) "" ["pinged"]=> string(0) "" ["post_modified"]=> string(19) "2012-10-04 16:50:19" ["post_modified_gmt"]=> string(19) "2012-10-04 16:50:19" ["post_content_filtered"]=> string(0) "" ["post_parent"]=> int(0) ["guid"]=> string(54) "http://dovecotes.local//?post_type=products&p=258" ["menu_order"]=> int(0) ["post_type"]=> string(8) "products" ["post_mime_type"]=> string(0) "" ["comment_count"]=> string(1) "0" ["ancestors"]=> array(0) { } ["filter"]=> string(3) "raw" }

1 个答案:

答案 0 :(得分:0)

我不能保证这会起作用,但我在定义自定义帖子类型时总是避免使用'register_meta_box_cb'来支持'add_meta_boxes'动作钩子。

除了你的'支持'参数中的额外逗号之外,你的代码看起来是正确的,所以你的例子中的任何内容都不会让我相信任何一个都可能是罪魁祸首,除非它是优先级差异。我也不确定你的metabox参数中是否允许id和callback参数相同,所以我也可以自由改变它:

register_post_type( 'products', array(
    'labels' => array(
        'name' => __( 'Products' ),
        'singular_name' => __( 'Product' ),
    ),
    'public' => true,
    'menu_position' => 20,
    'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail', 'comments' ),
    'taxonomies' => array('category'),
    'capability_type' => 'post',
    'rewrite' => array( 'slug' => 'products','with_front' => TRUE)
));
add_action('add_meta_boxes', 'product_page_meta_box');
function product_page_meta_box() {
    add_meta_box('product_meta_box_content', 'Product Specifications',  'product_meta_box_content_cb', 'products');
}

function product_meta_box_content_cb( $post ) {

    wp_nonce_field( plugin_basename( __FILE__ ), 'product_noonce' );

    echo '<div class="inside>';
        var_dump($post);
        echo '<p>Please detail the product specifics here:</p>';
    echo '</div>';
}

如果这没有帮助,那么我不确定如果没有看到更多代码,它还会是什么。