我有一个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文件并删除上面所有的自定义代码,但父页面仍没有保存。
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\'] );
}
}