私はWord属性のeコマースプラグインによって私に提供されたカスタム投稿タイプ 'product'を持っていますが、これにはPage Attributes MetaboxのPage Parentを変更するオプションはありません。それを改善したいのですが。
私は この投稿 をWordpress StackExchangeで見つけましたが、それは特にPage Attributes MetaboxのPage Template要素を扱います。私の目的に合うように、この他のWSE質問で提供される非常に良い答えを誰かが推測できますか?すべてのページ属性メタボックスオプションを含めることもできます。 Page Parentまで削除する必要はありません。しかし、親ページは私が必要とするものです。
編集#2:これは私がこれまでに持っているものです。メタボックスは適切なドロップダウンで表示されますが、parent_idを保存できません。 admin/post.phpページが$ _POST ['parent_id']変数をキャッチしていないようです。非階層のカスタム投稿タイプに親IDを許可しないWordpressの機能はありますか?それとも、私は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
に変更しましたが、post.phpページはまだ$ _POST ['parent_id']変数をキャッチしていません。また、woocommerce.phpファイルのremove_meta_box( 'pageparentdiv', 'product', 'side' );
をコメントアウトして上記のカスタムコードをすべて削除しようとしましたが、親ページはまだ保存されていません。
以下のリソースにはリストされていませんが、parent_id
は$_POST
および$_REQUEST
では予約名です。
このコードはWoocommerce商品ページで機能し、通常のページのドロップダウンを表示します。また、あなたのコードでは、selected
引数の値を埋めるためのget_post_meta
がありませんでした。
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'] );
}
}