J'ai un type de message personnalisé roulé à la main appelé ash_newsletter
. Je souhaite ajouter un bouton à la page d'administration post.php?post={$post->ID}&action=edit
pour ce type de message. Le bouton n'apparaîtra qu'une fois l'article publié. Le bouton ne sera cliquable qu'une fois. Le bouton sera situé dans la metabox "Publier".
Mon idée est que, lorsque l'utilisateur clique sur le bouton, un script vérifie l'état de la publication en cours et vérifie qu'un post_meta, ash_already_ran == false. Si les deux conditions sont remplies, une fonction sera appelée pour contacter un autre service. Si la fonction retourne true, 'ash_already_ran' sera mis à jour sur true.
Cela vous aidera à démarrer.
add_action( 'post_submitbox_misc_actions', 'custom_button' );
function custom_button(){
$html = '<div id="major-publishing-actions" style="overflow:hidden">';
$html .= '<div id="publishing-action">';
$html .= '<input type="submit" accesskey="p" tabindex="5" value="Customize Me!" class="button-primary" id="custom" name="publish">';
$html .= '</div>';
$html .= '</div>';
echo $html;
}
Ajoute un bouton personnalisé à Publish Meta Box - exemple;
Jusqu'à présent, vous devez toujours le faire.
Je dois y aller maintenant, mais essayez d'aborder les points ci-dessus et affichez vos résultats. Je reviendrai demain pour voir où vous en êtes et si quelqu'un d'autre peut aider davantage.
Merci userabuser
pour le bon départ. Je crois que le code développé ressemblerait davantage à:
add_action( 'post_submitbox_misc_actions', 'custom_button', 10, 1 );
function custom_button( $post ) {
// Show only for published pages.
if ( ! $post
|| 'publish' !== $post->post_status
|| 'page' !== $post->post_type ) {
return;
}
$html = '<div id="major-publishing-actions" style="overflow:hidden">';
$html .= '<div id="publishing-action">';
$html .= '<input type="submit" accesskey="p" tabindex="5" value="Custom Button" class="button-primary" id="submitbox-custom-button" name="publish">';
// Post meta example.
$user = get_user_by( 'ID', get_post_meta( $post->ID, '_edit_last', true ) );
if ( $user ) {
$html .= '<div>' . ucfirst( $post->post_type ) . ' ' . $post->ID . ' last edited by ' . $user->display_name . '</div>';
}
$html .= '</div>';
$html .= '</div>';
// Customize button click event.
$html .= "<script>window.addEventListener('load', function(){ jQuery('input#submitbox-custom-button').click(function(event){ event.preventDefault(); alert('You\'re editing " . $post->post_type . " " . $post->ID . "'); return true; }); }); </script>";
echo $html;
}
Il y a plusieurs façons de faire la couche de service, il n'est donc pas nécessaire de résoudre ce problème de plus de 5 ans aujourd'hui. Mais cela devrait être un bon début copier/coller pour tout le monde à l'avenir et fonctionnera hors de la boîte.
Il est évidemment préférable d'inclure votre JS dans un fichier chargé séparément, mais si vous avez envie de pirater un JS un peu plus lisible, vous pouvez utiliser ob_start
et ob_get_clean
.
ob_start(); ?>
<script>window.addEventListener('load', function() {
jQuery('input#submitbox-custom-button').click(function(event) {
event.preventDefault();
alert('You\'re editing <?php echo $post->post_type . " " . $post->ID; ?>');
return true;
});
});
</script>
<?php $html .= ob_get_clean();
Utiliser post_submitbox_misc_actions
hook est une méthode appropriée, mais vous ne devez pas utiliser les ID DOM deux fois comme suggéré dans les réponses précédentes. Ainsi, votre sortie HTML devrait ressembler à ceci:
add_action( 'post_submitbox_misc_actions', function( $post ){
// check something using the $post object
if ( get_post_status( $post->ID ) === 'publish' ){
echo '<div class="misc-pub-section">Some button...</div>';
}
});
Voir: https://developer.wordpress.org/reference/functions/post_submit_meta_box/