为页面父级添加标准页面属性Metabox

时间:2013-01-29 作者:Timothy D

我有一个Wordpress电子商务插件提供给我的自定义帖子类型“product”,该插件不提供在页面属性元框中更改页面父级的选项。我想补救一下。

我发现this post 在Wordpress StackExchange上,但它专门处理页面属性元框的页面模板元素。有人能根据WSE的另一个问题中提供的非常好的答案推断出适合我的目的吗?它甚至可以包括所有页面属性元框选项。它不必拆分为页面父级。但我需要的是Page Parent。

编辑#2:这是我到目前为止的资料。metabox会显示相应的下拉列表,但我无法保存parent\\u id。它似乎是admin/post。php页面未捕获$\\u POST[\'parent\\u id\']变量。Wordpress是否有一些功能不允许非层次化自定义帖子类型具有父ID?还是我应该在Woocommerce代码中查找?

    function product_attributes_meta_box($post) {
        $dropdown_args = array(
            \'post_type\'        => \'page\',
            \'exclude_tree\'     => $post->ID,
            \'selected\'         => $post->post_parent,
            \'name\'             => \'parent_id\',
            \'show_option_none\' => __(\'(no parent)\'),
            \'sort_column\'      => \'menu_order, post_title\',
            \'echo\'             => 0,
            \'child_of\'         => 282, // Sales Page
        );

        $dropdown_args = apply_filters( \'page_attributes_dropdown_pages_args\', $dropdown_args, $post );
        $pages = wp_dropdown_pages( $dropdown_args );
        if ( ! empty($pages) ) {
?>
<p><strong><?php _e(\'Parent\') ?></strong></p>
<label class="screen-reader-text" for="parent_id"><?php _e(\'Parent\') ?></label>
<?php echo $pages; ?>
<?php
        } // end empty pages check
    }
    add_action(\'add_meta_boxes\',\'add_post_template_metabox\');
    function add_post_template_metabox() {
        add_meta_box(\'postparentdiv\', __(\'Page Parent\'), \'product_attributes_meta_box\', \'product\', \'side\', \'core\');
    }
    add_action(\'save_post\',\'save_post_parent\',10,2);
    function save_post_parent($post_id,$post) {
      if ($post->post_type==\'product\' && !empty($_POST[\'parent_id\'])
      ) {
        update_post_meta($post->ID,\'_parent_id\',$_POST[\'parent_id\']);
      }
    }
编辑3:我将自定义帖子类型“product”更改为hierarchical => true 但是邮报。php页面仍然没有捕获$\\u POST[\'parent\\u id\']变量。我也试着发表评论remove_meta_box( \'pageparentdiv\', \'product\', \'side\' ); 在woocommerce。php文件并删除上面所有的自定义代码,但父页面仍没有保存。

1 个回复
SO网友:brasofilo

虽然未在以下参考资料中列出,但似乎parent_id 是中的保留名称$_POST$_REQUEST:

此代码在Woocommerce产品页面中工作,以显示常规页面的下拉列表。此外,在代码中,您缺少get_post_meta 填充selected 参数值。

add_action( \'add_meta_boxes\',\'add_metabox_wpse_83542\' );
add_action( \'save_post\', \'save_post_wpse_83542\', 10, 2 );

function add_metabox_wpse_83542() 
{
    add_meta_box(
        \'postparentdiv\', 
        __(\'Page Parent\'), 
        \'meta_box_content_wpse_83542\', 
        \'product\', 
        \'side\', 
        \'core\'
    );
}

function meta_box_content_wpse_83542( $post ) 
{
    $meta = get_post_meta( $post->ID, \'_parent_id\', true );
    $selected = ( isset( $meta ) ) ? $meta : \'\';
    $dropdown_args = array(
        \'post_type\'        => \'page\',
        \'exclude_tree\'     => $post->ID,
        \'selected\'         => $selected,
        \'name\'             => \'_parent_id\',
        \'show_option_none\' => __( \'(no parent)\' ),
        \'sort_column\'      => \'menu_order, post_title\',
        \'echo\'             => 0,
        \'child_of\'         => 97, // Sales Page
    );

    $dropdown_args = apply_filters( \'page_attributes_dropdown_pages_args\', $dropdown_args, $post );
    $pages = wp_dropdown_pages( $dropdown_args );

    if ( ! empty($pages) ) 
    {
        wp_nonce_field( plugin_basename( __FILE__ ), \'noncename_wpse_83542\' );          
        ?>
        <p><strong><?php _e(\'Parent\') ?></strong></p>
        <label class="screen-reader-text" for="parent_id"><?php _e(\'Parent\') ?></label>
        <?php 
        echo $pages; 
    } // end empty pages check
}    

function save_post_wpse_83542( $post_id, $post ) 
{
    // Block on Autosave
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )  
        return;

    // Block Revisions
    if ( \'revision\' == $post->post_type )
        return;

    // Nonce verify
    if ( !wp_verify_nonce( $_POST[\'noncename_wpse_83542\'], plugin_basename( __FILE__ ) ) )
        return;

    if ( $post->post_type == \'product\' && !empty( $_POST[\'_parent_id\'] ) ) 
    {
        update_post_meta( $post->ID, \'_parent_id\', $_POST[\'_parent_id\'] );
    }
}

结束

相关推荐

带有Metabox插件的WooCommerce

我正在使用woocommerce作为我的电子商务解决方案和metabox插件(http://www.deluxeblogtips.com/meta-box/ ) 在实现元框时,让我的生活更轻松。我从来没有遇到过任何问题,但我现在需要将自己的自定义元框添加到woocommerce产品帖子类型中。。。。但它从未被添加?如果我以老式的add\\u meta\\u box方式添加元框,并且元框添加正确。。。。所以我想知道你是否知道为什么使用插件会导致问题?下面是我用来将meta-box添加到全局meta\\u-b