ADD_META_BOX(将仅在特定页面管理员WordPress中显示)

时间:2021-04-01 作者:Niel Fernandez

我想知道如何在WordPress特定的页面管理中添加meta\\u框,我的意思是,当我用下面源代码教程提供的代码片段创建meta\\u框时,它确实是完美和有效的,但我需要控制的一件事是,只在特定的页面中显示meta\\u框,例如:假设我在WordPress项目中有两个名为Home和About的页面。

默认情况下,当我创建meta_框时,我添加的meta_框将显示在同一个页面管理后端,当我单击“主页”和“关于页面”的编辑按钮时,我的meta框将显示在这两个页面中。我想要的是,当我单击编辑页面时,使meta\\u框仅显示在“主页”管理后端页面中。

我的目标是在每个不同的页面上设置不同的meta\\u框,这意味着用户特别是博客编辑,当他们在每个页面上单击编辑按钮时,希望在不同的页面上设置不同的meta\\u框,这是我无法解决的问题,你能帮我解决这个问题吗

/*
Plugin Name: Meta Box Example
Description: Example demonstrating how to add Meta Boxes.
Plugin URI:  https://plugin-planet.com/
Author:      Jeff Starr
Version:     1.0
*/

// register meta box
function myplugin_add_meta_box() {

    $post_types = array( \'post\', \'page\' );

    foreach ( $post_types as $post_type ) {

        add_meta_box(
            \'myplugin_meta_box\',         // Unique ID of meta box
            \'MyPlugin Meta Box\',         // Title of meta box
            \'myplugin_display_meta_box\', // Callback function
            $post_type                   // Post type
        );

    }

}
add_action( \'add_meta_boxes\', \'myplugin_add_meta_box\' );

// display meta box
function myplugin_display_meta_box( $post ) {

    $value = get_post_meta( $post->ID, \'_myplugin_meta_key\', true );

    wp_nonce_field( basename( __FILE__ ), \'myplugin_meta_box_nonce\' );

    ?>

    <label for="myplugin-meta-box">Field Description</label>
    <select id="myplugin-meta-box" name="myplugin-meta-box">
        <option value="">Select option...</option>
        <option value="option-1" <?php selected( $value, \'option-1\' ); ?>>Option 1</option>
        <option value="option-2" <?php selected( $value, \'option-2\' ); ?>>Option 2</option>
        <option value="option-3" <?php selected( $value, \'option-3\' ); ?>>Option 3</option>
    </select>

<?php

}

// save meta box
function myplugin_save_meta_box( $post_id ) {

    $is_autosave = wp_is_post_autosave( $post_id );
    $is_revision = wp_is_post_revision( $post_id );

    $is_valid_nonce = false;

    if ( isset( $_POST[ \'myplugin_meta_box_nonce\' ] ) ) {

        if ( wp_verify_nonce( $_POST[ \'myplugin_meta_box_nonce\' ], basename( __FILE__ ) ) ) {

            $is_valid_nonce = true;

        }

    }

    if ( $is_autosave || $is_revision || !$is_valid_nonce ) return;

    if ( array_key_exists( \'myplugin-meta-box\', $_POST ) ) {

        update_post_meta(
            $post_id,                                            // Post ID
            \'_myplugin_meta_key\',                                // Meta key
            sanitize_text_field( $_POST[ \'myplugin-meta-box\' ] ) // Meta value
        );

    }

}
add_action( \'save_post\', \'myplugin_save_meta_box\' );
是否有任何条件或功能可供您推荐?

2 个回复
最合适的回答,由SO网友:vishwa 整理而成

/* Add meta boxs for particular pages */

function meta_set_particular_page() {
    $post_id = $_GET[\'post\'] ? $_GET[\'post\'] : $_POST[\'post_ID\'];
    $current_page_title = get_the_title($post_id);
    if ($current_page_title == \'home\') {
        add_meta_box(\'Home_page\', \'Home Name:\', \'only_home\', \'page\', \'side\', \'core\');
    }
    if($current_page_title == \'about\'){
        add_meta_box(\'About_page\', \'About Name:\', \'only_about\', \'page\', \'side\', \'core\');
    }
}
add_action(\'add_meta_boxes\', \'meta_set_particular_page\');

/* Add custom meta box for home page */

function only_home($post) {
    $home_page = esc_html(get_post_meta($post->ID, \'home_page\', true));
    ?>
    <table style="width:100%;">
        <tr>
            <td style="width: 20%">Name</td>
            <td style="width: 40%">
                <input type="text" size="70" name="home_page" placeholder="Home Name" value="<?php echo $home_page; ?>">
            </td>
        </tr>
    </table>
    <?php
}

/*Add custom meta box for about page*/

function only_about($post) {
    $about_page = esc_html(get_post_meta($post->ID, \'about_page\', true));
    ?>
    <table style="width:100%;">
        <tr>
            <td style="width: 20%">Name</td>
            <td style="width: 40%">
                <input type="text" size="50" name="about_page" placeholder="About Name" value="<?php echo $about_page; ?>">
            </td>
        </tr>
    </table>
    <?php
}

/*Save custom post meta values*/

function custom_metabox_fields($custom_metabox_id) {
    if (isset($_POST[\'home_page\'])) {
        update_post_meta($custom_metabox_id, \'home_page\', $_POST[\'home_page\']);
    }
     if (isset($_POST[\'about_page\'])) {
        update_post_meta($custom_metabox_id, \'about_page\', $_POST[\'about_page\']);
    }
}
add_action(\'save_post\', \'custom_metabox_fields\', 10, 2);
SO网友:Kirtan
**check via post ID for a specific page or post**


$post_id = $_GET[\'post\'] ? $_GET[\'post\'] : $_POST[\'post_ID\'] ;
if ($post_id == \'84\')
{
    add_meta_box();
}

**OR
check via template page name just as below**



$template_file = get_post_meta($post_id,\'_wp_page_template\',TRUE);
if ($template_file == \'home.php\')
{
    add_meta_box();
}