web-dev-qa-db-fra.com

Afficher la boîte méta sur un modèle de page spécifique

Existe-t-il un moyen d’afficher UNIQUEMENT les paramètres de page personnalisés sur des modèles de page spécifiques?

Par exemple, j'ai un champ de paramètres: "Paramètres personnalisés". Je ne veux pas que cela apparaisse sur le "Modèle de page par défaut". Je veux seulement qu'il s'affiche si nous sélectionnons le "Modèle de page Paramètres de page personnalisés".

Voici mon code de boîte méta:

function cd_meta_box_add()  
{  
add_meta_box( 'icon-class-meta-box', 'Icon Class', 'ic_meta_box_cb', 'page', 'side', 'default' );  
}  
add_action( 'add_meta_boxes', 'cd_meta_box_add' ); 

function ic_meta_box_cb( $post)  
{  
$values = get_post_meta( $post->ID );   
$selected = isset( $values['ic_meta_box_select'] ) ? esc_attr( $values['ic_meta_box_select'][0] ) : ”;  

wp_nonce_field( 'ic_meta_box_nonce', 'meta_box_nonce' ); 
?>  
<p>  
    <label for="ic_meta_box_select">Class</label>  
    <select name="ic_meta_box_select" id="ic_meta_box_select">
        <option value=" " <?php selected( $selected, ' ' ); ?>> </option> 
        <option value="red" <?php selected( $selected, 'red' ); ?>>red</option>  
        <option value="blue" <?php selected( $selected, 'blue' ); ?>>blue</option>
        <option value="green" <?php selected( $selected, 'green' ); ?>>green</option>
        <option value="pink" <?php selected( $selected, 'pink' ); ?>>pink</option>
        <option value="orange" <?php selected( $selected, 'orange' ); ?>>orange</option>
        <option value="black" <?php selected( $selected, 'black' ); ?>>black</option>
    </select>  
</p>
<?php    
}
1
Derek

J'utilise généralement CSS et jQuery pour ce type de choses en accrochant admin_head. Cela devrait être fait client-site car un utilisateur a la possibilité de sélectionner votre modèle ou un autre après le chargement du DOM. En gros, tout ce que vous faites est de vérifier si la valeur est définie pour #page_template et de basculer show/hide si votre modèle est sélectionné ou non.

add_action( 'admin_head-post.php', 'metabox_switcher' );
add_action( 'admin_head-post-new.php', 'metabox_switcher' );

function metabox_switcher( $post ){

    #Isolate to your specific post type
    if( $post->post_type === 'page' ){

        #Locate the ID of your metabox with Developer tools
        $metabox_selector_id = 'id-of-your-metabox';

        echo '
            <style type="text/css">
                /* Hide your metabox so there is no latency flash of your metabox before being hidden */
                #'.$metabox_selector_id.'{display:none;}
            </style>
            <script type="text/javascript">
                jQuery(document).ready(function($){

                    //You can find this in the value of the Page Template dropdown
                    var templateName = \'template-folder/file-name.php\';

                    //Page template in the publishing options
                    var currentTemplate = $(\'#page_template\');

                    //Identify your metabox
                    var metabox = $(\'#'.$metabox_selector_id.'\');

                    //On DOM ready, check if your page template is selected
                    if(currentTemplate.val() === templateName){
                        metabox.show();
                    }

                    //Bind a change event to make sure we show or hide the metabox based on user selection of a template
                    currentTemplate.change(function(e){
                        if(currentTemplate.val() === templateName){
                            metabox.show();
                        }
                        else{
                            //You should clear out all metabox values here;
                            metabox.hide();
                        }
                    });
                });
            </script>
        ';
    }
}
1
Brian Fegter
add_action('add_meta_boxes', 'add_product_meta');
function add_product_meta() {
    global $post;

    if(!empty($post)) {
        $pageTemplate = get_post_meta($post->ID, '_wp_page_template', true);

        if($pageTemplate == 'page-templates/product-page.php' ) {
            add_meta_box(
                'product_meta', // $id
                'Product Information', // $title
                'display_product_information', // $callback
                'page', // $page
                'normal', // $context
                'high'); // $priority
        }
    }
}

function display_product_information() {
    // Add the HTML for the post meta
}
0
Bipin Sapkota