Aggiungere pulsante alla pagina di modifica post quando post_status=publish

4 ott 2012, 21:03:40
Visualizzazioni: 15.1K
Voti: 8

Domanda

  • Quale hook posso usare per aggiungere un pulsante personalizzato al metabox 'Pubblica' nella pagina di amministrazione 'Modifica Post'?

Caso d'uso

Ho un custom post type personalizzato chiamato ash_newsletter. Voglio aggiungere un pulsante alla pagina di amministrazione post.php?post={$post->ID}&action=edit per questo tipo di post. Il pulsante apparirà solo dopo che il post è stato pubblicato. Il pulsante potrà essere cliccato una sola volta. Il pulsante sarà posizionato nel metabox "Pubblica".

La mia idea è che quando il pulsante viene cliccato, uno script verificherà lo stato corrente del post e controllerà che un post_meta, ash_already_ran==false. Se entrambe le condizioni sono soddisfatte, verrà chiamata una funzione che contatterà un altro servizio. Se la funzione restituisce true, 'ash_already_ran' verrà aggiornato a true.

0
Tutte le risposte alla domanda 3
3
14

Questo ti darà un punto di partenza;

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="Personalizzami!" class="button-primary" id="custom" name="publish">';
        $html .= '</div>';
        $html .= '</div>';
        echo $html;
}

Aggiunge un pulsante personalizzato al Publish Meta Box - esempio;

descrizione immagine

Finora devi ancora:

  • registrare il pulsante personalizzato solo sul tuo custom post type
  • scrivere un controllo condizionale per mostrare il pulsante solo quando il post ha uno status di pubblicazione
  • scrivere una funzione personalizzata per chiamare il tuo servizio custom

Devo andare ora, ma prova ad affrontare i punti sopra e pubblica i tuoi risultati. Tornerò domani per vedere a che punto sei e se qualcun altro può aiutare ulteriormente.

4 ott 2012 21:56:49
Commenti

fantastico! Quindi ho il mio pulsante che appare solo sul mio custom post e solo quando il post è pubblicato e non ha un valore per 'already_done'. Ho scritto e testato la mia funzione service_call. L'unica cosa di cui non sono ancora sicuro è a quale hook dovrebbe essere collegata service_call().

dnagirl dnagirl
5 ott 2012 21:11:12

so che questo post è vecchio ma potresti mostrare il codice completo, questo è esattamente quello che stavo cercando di fare.

rudtek rudtek
10 set 2016 01:31:49

come possiamo aggiungere questo in WP 5.0?

Haseeb Haseeb
8 dic 2018 11:50:20
1

Grazie userabuser per il punto di partenza. Credo che il codice espanso sarebbe più simile a:

add_action( 'post_submitbox_misc_actions', 'custom_button', 10, 1 );

function custom_button( $post ) {

    // Mostra solo per le pagine pubblicate.
    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="Pulsante Personalizzato" class="button-primary" id="submitbox-custom-button" name="publish">';

    // Esempio di post meta.
    $user = get_user_by( 'ID', get_post_meta( $post->ID, '_edit_last', true ) );
    if ( $user ) {
        $html .= '<div>' . ucfirst( $post->post_type ) . ' ' . $post->ID . ' modificato per ultimo da ' . $user->display_name . '</div>';
    }

    $html .= '</div>';
    $html .= '</div>';

    // Personalizza l'evento click del pulsante.
    $html .= "<script>window.addEventListener('load', function(){ jQuery('input#submitbox-custom-button').click(function(event){  event.preventDefault(); alert('Stai modificando " . $post->post_type . " " . $post->ID . "'); return true; }); }); </script>";

    echo $html;
}

Ci sono diversi modi per implementare il service layer quindi non c'è bisogno di risolvere quel problema di 5+ anni fa oggi. Ma questo dovrebbe essere un buon punto di partenza copia/incolla per chiunque in futuro e funzionerà subito senza modifiche.

È ovviamente meglio includere il tuo JS in un file caricato separatamente ma se vuoi inserire del JS più leggibile puoi usare ob_start e ob_get_clean.

ob_start(); ?>
<script>window.addEventListener('load', function() {
    jQuery('input#submitbox-custom-button').click(function(event) {
      event.preventDefault();
      alert('Stai modificando <?php echo $post->post_type . " " . $post->ID; ?>');
      return true;
    });
  });
</script>
<?php $html .= ob_get_clean();
14 feb 2018 21:31:21
Commenti

come aggiungiamo nella versione 5.0 di WP

Haseeb Haseeb
8 dic 2018 11:49:25
0

Utilizzare l'hook post_submitbox_misc_actions è un modo appropriato, ma non dovresti usare gli ID DOM due volte come suggerito nelle risposte precedenti. Quindi, il tuo output HTML dovrebbe essere così:

add_action( 'post_submitbox_misc_actions', function( $post ){
    // controlla qualcosa usando l'oggetto $post
    if ( get_post_status( $post->ID ) === 'publish' ){
        echo '<div class="misc-pub-section">Un pulsante...</div>';
    }
});

Vedi: https://developer.wordpress.org/reference/functions/post_submit_meta_box/

8 lug 2018 17:55:26