Adăugare buton în pagina de editare articol când post_status=publish

4 oct. 2012, 21:03:40
Vizualizări: 15.1K
Voturi: 8

Întrebare

  • ce hook poate fi folosit pentru a adăuga un buton personalizat în metabox-ul 'Publish' pe pagina de administrare 'Edit Post'?

Caz de utilizare

Am un tip de postare personalizat numit ash_newsletter. Doresc să adaug un buton pe pagina de administrare post.php?post={$post->ID}&action=edit pentru acest tip de postare. Butonul va apărea doar după ce postarea a fost publicată. Butonul va putea fi accesat doar o singură dată. Butonul va fi localizat în metabox-ul "Publish".

Ideea mea este că atunci când butonul este apăsat, un script va verifica starea curentă a postării și va verifica dacă o metadatelă, ash_already_ran==false. Dacă ambele condiții sunt îndeplinite, va fi apelată o funcție care contactează un alt serviciu. Dacă funcția returnează true, 'ash_already_ran' va fi actualizată la true.

0
Toate răspunsurile la întrebare 3
3
14

Acesta este punctul de pornire;

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

Adaugă un buton personalizat în căsuța Meta de Publicare - exemplu;

Buton personalizat în căsuța Meta de Publicare

Până acum mai trebuie să:

  • înregistrezi butonul personalizat doar pe tipul tău personalizat de postare
  • scrii o verificare condițională pentru a afișa butonul doar când postarea are statusul de publicat
  • scrii o funcție personalizată pentru a apela serviciul tău particular

Trebuie să plec acum, dar încearcă să abordezi punctele de mai sus și postează-ți rezultatele. Mă voi întoarce mâine să văd unde ați ajuns și dacă mai poate ajuta cineva.

4 oct. 2012 21:56:49
Comentarii

super! Deci am butonul meu care apare doar pe postarea mea personalizată și doar când postarea este publicată și nu are o valoare pentru 'already_done'. Am scris și testat funcția mea service_call. Singurul lucru de care încă nu sunt sigur este la ce hook ar trebui să atașez service_call().

dnagirl dnagirl
5 oct. 2012 21:11:12

știu că acest post este vechi dar ai putea să arăți codul complet, asta este exact ceea ce căutam să fac.

rudtek rudtek
10 sept. 2016 01:31:49

cum adăugăm asta în WP 5.0?

Haseeb Haseeb
8 dec. 2018 11:50:20
1

Mulțumesc userabuser pentru început. Cred că codul extins ar arăta mai degrabă astfel:

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

function custom_button( $post ) {

    // Afișează doar pentru paginile publicate.
    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="Buton Personalizat" class="button-primary" id="submitbox-custom-button" name="publish">';

    // Exemplu de meta pentru postare.
    $user = get_user_by( 'ID', get_post_meta( $post->ID, '_edit_last', true ) );
    if ( $user ) {
        $html .= '<div>' . ucfirst( $post->post_type ) . ' ' . $post->ID . ' editat ultima dată de ' . $user->display_name . '</div>';
    }

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

    // Personalizează evenimentul de click pe buton.
    $html .= "<script>window.addEventListener('load', function(){ jQuery('input#submitbox-custom-button').click(function(event){  event.preventDefault(); alert('Editezi " . $post->post_type . " " . $post->ID . "'); return true; }); }); </script>";

    echo $html;
}

Există mai multe modalități de a implementa stratul de serviciu, așa că nu este nevoie să rezolvi acea problemă veche de peste 5 ani astăzi. Dar acesta ar trebui să fie un bun punct de plecare pentru copiere/inserare pentru oricine în viitor și va funcționa imediat.

Este evident mai bine să incluzi JavaScript-ul într-un fișier încărcat separat, dar dacă vrei să adaugi un JavaScript mai lizibil, poți folosi ob_start și ob_get_clean.

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

cum adăugăm în versiunea WP 5.0

Haseeb Haseeb
8 dec. 2018 11:49:25
0

Utilizarea cârligului post_submitbox_misc_actions este o metodă adecvată, dar nu ar trebui să utilizați ID-uri DOM de două ori, așa cum a fost sugerat în răspunsurile anterioare. Astfel, codul HTML generat ar trebui să arate astfel:

add_action( 'post_submitbox_misc_actions', function( $post ){
    // verifică ceva folosind obiectul $post
    if ( get_post_status( $post->ID ) === 'publish' ){
        echo '<div class="misc-pub-section">Un buton...</div>';
    }
});

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

8 iul. 2018 17:55:26