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
}
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>
';
}
}
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
}