it-swarm.com.de

schaltfläche hinzufügen, um die Bearbeitungsseite zu veröffentlichen, wenn post_status = publizieren

Frage

  • mit welchem ​​Hook kann der Metabox "Veröffentlichen" auf der Administrationsseite "Beitrag bearbeiten" eine benutzerdefinierte Schaltfläche hinzugefügt werden?

Anwendungsfall

Ich habe einen handgerollten benutzerdefinierten Beitragstyp namens ash_newsletter. Ich möchte der post.php?post={$post->ID}&action=edit admin-Seite für diesen Beitragstyp eine Schaltfläche hinzufügen. Die Schaltfläche wird erst angezeigt, nachdem der Beitrag veröffentlicht wurde. Die Schaltfläche kann nur einmal angeklickt werden. Die Schaltfläche befindet sich in der Metabox "Veröffentlichen".

Meine Idee ist, dass beim Klicken auf die Schaltfläche ein Skript den aktuellen Post-Status und das Post-Meta "ash_already_ran == false" überprüft. Wenn beide Bedingungen erfüllt sind, wird eine Funktion aufgerufen, die einen anderen Dienst kontaktiert. Wenn die Funktion true zurückgibt, wird 'ash_already_ran' auf true aktualisiert.

4
dnagirl

Dies wird Ihnen den Einstieg erleichtern.

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;
}

Fügt eine benutzerdefinierte Schaltfläche zum Veröffentlichen der Meta-Box hinzu - Beispiel;

enter image description here

Bisher müssen Sie noch;

  • registrieren Sie die benutzerdefinierte Schaltfläche nur für Ihren benutzerdefinierten Beitragstyp
  • schreibe eine bedingte Prüfung, ob die Schaltfläche nur angezeigt werden soll, wenn der Post den Status post_status of publish hat
  • schreiben Sie eine benutzerdefinierte Funktion, um Ihren benutzerdefinierten Dienst aufzurufen

Ich muss jetzt gehen, aber versuchen Sie, die obigen Punkte anzugehen und Ihre Ergebnisse zu veröffentlichen. Ich werde morgen zurückkehren, um zu sehen, wo Sie sich befinden und ob mir jemand weiterhelfen kann.

9
userabuser

Danke userabuser für den Vorsprung. Ich glaube, der erweiterte Code würde näher aussehen:

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;
}

Es gibt mehrere Möglichkeiten, die Service-Schicht zu erstellen, sodass das mehr als 5 Jahre alte Problem heute nicht mehr behoben werden muss. Aber dies sollte in Zukunft für jeden ein guter Kopier-/Einfügebeginn sein und sofort funktionieren.

Es ist natürlich besser, Ihren JS in eine separat geladene Datei aufzunehmen, aber wenn Sie das Gefühl haben, etwas lesbarer zu werden, können Sie ob_start und ob_get_clean verwenden.

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();
2
jgraup

Die Verwendung von post_submitbox_misc_actions hook ist eine angemessene Methode, aber Sie sollten DOM-IDs nicht zweimal verwenden, wie in den vorherigen Antworten vorgeschlagen. Ihre HTML-Ausgabe sollte also so aussehen:

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>';
    }
});

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

1
Dominik Späte