Je veux ajouter Metabox pour les articles de la catégorie = 18 et j'utilise le code suivant mais je ne peux pas le faire Alors aidez-moi s'il vous plaît->
add_action('admin_init','my_meta_init');
function my_meta_init()
{
$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;
// checks for post/page ID
if ($post_id->post_category[0] == 18)
{
add_meta_box('team_meta', 'My Custom Meta Box 1', 'team_meta_1', 'post', 'normal', 'high');
function team_meta_1(){
global $post;
// Noncename needed to verify where the data originated
echo '<input type="hidden" name="eventmeta_noncename" id="eventmeta_noncename" value="' .
wp_create_nonce( plugin_basename(__FILE__) ) . '" />';
// Get the location data if its already been entered
$designation = get_post_meta($post->ID, '_designation', true);
// Echo out the field
// echo '<input type="text" name="_description" value="' . $description . '" />';
echo '<textarea name=_designation rows="6" cols="100">'.$designation.'</textarea>';
}
function my_meta_save($post_id, $post) {
// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( !wp_verify_nonce( $_POST['eventmeta_noncename'], plugin_basename(__FILE__) )) {
return $post->ID;
}
// Is the user allowed to edit the post or page?
if ( !current_user_can( 'edit_post', $post->ID ))
return $post->ID;
// OK, we're authenticated: we need to find and save the data
// We'll put it into an array to make it easier to loop though.
$events_meta['_designation'] = $_POST['_designation'];
// Add values of $events_meta as custom fields
foreach ($events_meta as $key => $value) { // Cycle through the $events_meta array!
if( $post->post_type == 'revision' ) return; // Don't store custom data twice
$value = implode(',', (array)$value); // If $value is an array, make it a CSV (unlikely)
if(get_post_meta($post->ID, $key, FALSE)) { // If the custom field already has a value
update_post_meta($post->ID, $key, $value);
} else { // If the custom field doesn't have a value
add_post_meta($post->ID, $key, $value);
}
if(!$value) delete_post_meta($post->ID, $key); // Delete if blank
}
}
add_action('save_post','my_meta_save');
}
}
Au lieu de if ($post_id->post_category[0] == 18)
try
if ( $post_id && in_category( 18, $post_id ) )
De plus, l'action 'save_post'
devrait être
add_action('save_post','my_meta_save', 10, 2);
Si vous souhaitez que la métabox apparaisse sur un nouveau message lorsque la catégorie est sélectionnée, supprimez le test de catégorie externe if si vous spécifiez que la métabox est toujours ajoutée, puis affichez/masquez à l'aide de jQuery (placez-le après l'écho de la zone de texte).
echo '<textarea name=_designation rows="6" cols="100">'.$designation.'</textarea>';
?>
<script type="text/javascript">
jQuery(document).ready(function() {
(function ($) {
$('#in-category-18').change(function () { $('#team_meta').toggle(this.checked); }).change();
})(jQuery);
});
</script>
<?php