Je souhaite ajouter metabox pour afficher la liste des publications personnalisées et en sélectionner deux à la modification ou à l'ajout d'écrans de publication. Et enfin, lorsque le message est publié, affichez-les sur une seule page. Aidez-moi, s'il vous plaît! Toute aide serait appréciée....
add_action( 'add_meta_boxes', function () {
add_meta_box(
'yourcustom_sectionid',
__( '???? Custom Offer Section', 'yourtextdomain' ),
function ( $post ) {
wp_nonce_field( plugin_basename( __FILE__ ), 'yourcustom_noncename' );
$cstm = get_post_meta(get_the_ID(),'yourcustom_meta',true);
echo "<pre>".print_r($cstm,true)."</pre>";
$getPostsToSelect = get_posts('post_type=offers&numberposts=-1');
foreach ($getPostsToSelect as $aPostsToSelect) {
?>
<label>
<input
type='checkbox'
name='yourcustom_meta[]'
class='postsToSelect'
value='<?php echo $aPostsToSelect->ID ?>'
/>
<?php echo $aPostsToSelect->post_title ?>
</label><br />
<?php
}
},
'listing'
);
} );
et ensuite en dessous:
echo "<script type='text/javascript'>
var limit = 2;
jQuery('input.single-checkbox').on('change', function(evt) {
if(jQuery('input.single-checkbox:checked').length > limit) {
this.checked = false;
}
});
</script>";
mais le jquery ne semble pas fonctionner pour sélectionner les deux cases cochées ... et après ce problème, aidez-moi à imprimer les deux messages sélectionnés.
le résultat que j'ai obtenu jusqu'à présent est avec 4 messages personnalisés nommés offre dans l'image ci-dessous
Vous pouvez ajouter une metabox dans l'écran d'édition avec
add_action( 'add_meta_boxes', function () {
add_meta_box(
'yourcustom_sectionid',
__( '???? Custom Meta Box', 'yourtextdomain' ),
function ( $post ) {
wp_nonce_field( plugin_basename( __FILE__ ), 'yourcustom_noncename' );
$cstm = get_post_meta(get_the_ID(),'yourcustom_meta',true);
echo "<pre>".print_r($cstm,true)."</pre>";
},
'page'
);
} );
Vous pouvez interroger les publications avec get_posts()
et ajouter des cases à cocher à l'intérieur de cette métabox.
$getPostsToSelect = get_posts('post_type=post&numberposts=-1');
foreach ($getPostsToSelect as $aPostsToSelect) {
?>
<label>
<input
type='checkbox'
name='yourcustom_meta[]'
class='postsToSelect'
value='<?php echo $aPostsToSelect->ID ?>'
/>
<?php echo $aPostsToSelect->post_title ?>
</label><br />
<?php
}
Vous auriez besoin de jQuery pour limiter à 2 sélectionnés. Ce serait quelque chose comme
var limit = 2;
jQuery('input.single-checkbox').on('change', function(evt) {
if(jQuery('input.single-checkbox:checked').length > limit) {
this.checked = false;
}
});
Vous économiserez tout avec quelque chose comme:
add_action( 'save_post', function ( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( !wp_verify_nonce( $_POST['yourcustom_noncename'], plugin_basename( __FILE__ ) ) )
return;
if ( 'page' == $_POST['post_type'] ) { // not the Post Type
if ( !current_user_can( 'edit_page', $post_id ) )
return;
} else {
if ( !current_user_can( 'edit_post', $post_id ) )
return;
}
update_post_meta($post_id,'yourcustom_meta',$_POST['yourcustom_meta']);
});
Ensuite, dans votre single.php
, ou quel que soit l'endroit où vous voulez que les boucles s'affichent, il vous suffit de les appeler:
$cstm = get_post_meta(get_the_ID(),'yourcustom_meta',true);
foreach ($cstm as $aPostToDisplay) {
echo "<pre>{$aPostToDisplay->ID} - {$aPostToDisplay->post_title}</pre>";
}
S'il vous plaît noter que j'ai libre remis cela (non testé), donc copier/coller ne fonctionnera pas .. C'est plus d'un guide logique.
J'ai supposé sans double vérification que name='yourcustom_meta[]'
ne transmettrait que les vérifiés à $_POST['yourcustom_meta']
, mais vous voudrez peut-être confirmer cela.
J'ai également utilisé des fonctions anonymes, qui ne devraient probablement pas être utilisées s'il s'agit d'un plugin/thème public.