Wie kann ich dafür sorgen, dass auf der Seite "Neuen Beitrag hinzufügen" die Sichtbarkeit standardmäßig auf "Privat" gesetzt ist?

8

Ich versuche, ein Plugin zu erstellen, das die Seite "Neuen Beitrag hinzufügen" so ändert, dass im Sichtbarkeitsfeld standardmäßig "Privat" angezeigt wird:

Status: Draft
Visibility: **Private**
Publish immediately

[Publish]

... im Gegensatz zu dem, was WordPress normalerweise annimmt:

Status: Draft
Visibility: **Public**
Publish immediately

[Publish]

Im Moment verwende ich den Filter "wp_insert_post_data". Dadurch kann ich alle Posts mit dem Poststatus "Auto-Draft" in "Private" ändern. Während dies funktioniert, gibt es einen unbeabsichtigten Nebeneffekt: Wenn Sie den post_status in "privat" ändern, wird der Beitrag anscheinend automatisch veröffentlicht, und die Schaltfläche im Editor wird in "Aktualisieren" geändert. Wenn der Benutzer vor der Angabe eines Titels speichert, wird der Beitrag mit dem Titel "Auto-Draft" veröffentlicht.

Gibt es eine Möglichkeit, die Sichtbarkeit standardmäßig einfach auf "Privat" zu ändern, ohne den Beitrag automatisch zu veröffentlichen, und die Schaltfläche auf "Aktualisieren" zu ändern? In Vanilla WordPress können Benutzer die Sichtbarkeit manuell in "Privat" ändern, und die Schaltfläche bleibt "Veröffentlichen". Ich muss dies nur über ein Plugin erreichen. Ich möchte auch sicherstellen, dass "public" vom Benutzer weiterhin ausgewählt werden kann, falls er dies wünscht.

Vielen Dank!

Matt Refghi
quelle

Antworten:

-1

Da Sie ein Plug-In entwickeln, gehe ich davon aus, dass Sie keine Dateien außerhalb von wp-content / plugins oder ../themes berühren möchten.

Wenn dies jedoch nicht der Fall ist, gehen Sie wie folgt vor:
Gehen Sie zu wp-admin / includes / meta-boxs.php und suchen Sie:

$visibility = 'public';
$visibility_trans = __('Public');

Ändern Sie es jetzt auf das Offensichtliche:

$visibility = 'private';
$visibility_trans = __('Private');

Dies wirkt sich wiederum auf die Datei meta-boxs.php aus, die sich außerhalb des Plugins-Ordners befindet. Ich denke jedoch, dass der Ansatz, den Sie verfolgen sollten, darin besteht , ein neues Meta-Feld zu erstellen, Ihre benutzerdefinierte Sichtbarkeitseinstellung (dh privat) hinzuzufügen und letztere die Standard-WP-Sichtbarkeitseinstellung überschreiben zu lassen .

Am besten,
Chris

cr0z3r
quelle
2
Lösungen, bei denen Sie Kerndateien ändern müssen, werden bei einem Update immer überprüft. Deshalb sind sie wirklich keine Lösungen.
Drew Gourley
Einverstanden, aber wenn ich mich nicht irre, glaube ich, dass der fett gedruckte Teil über ein reguläres Plugin erreichbar ist. Wenn das der Fall ist, dann ist das eine anständige Lösung, nur etwas mehr Arbeit als das, was ich tun wollte.
Matt Refghi
3

vom Plugin; verwendet die Aktion 'post_submitbox_misc_actions' und eine Abfrage, um den Benutzer zu fangen. Veröffentlichungsformular: http://wordpress.org/extend/plugins/private-post-by-default/

function default_post_visibility(){
global $post;

if ( 'publish' == $post->post_status ) {
    $visibility = 'public';
    $visibility_trans = __('Public');
} elseif ( !empty( $post->post_password ) ) {
    $visibility = 'password';
    $visibility_trans = __('Password protected');
} elseif ( $post_type == 'post' && is_sticky( $post->ID ) ) {
    $visibility = 'public';
    $visibility_trans = __('Public, Sticky');
} else {
    $post->post_password = '';
    $visibility = 'private';
    $visibility_trans = __('Private');
} ?>

<script type="text/javascript">
    (function($){
        try {
            $('#post-visibility-display').text('<?php echo $visibility_trans; ?>');
            $('#hidden-post-visibility').val('<?php echo $visibility; ?>');
            $('#visibility-radio-<?php echo $visibility; ?>').attr('checked', true);
        } catch(err){}
    }) (jQuery);
</script>
<?php
}

add_action( 'post_submitbox_misc_actions' , 'default_post_visibility' );

?>
Hearvox
quelle
Dadurch werden Entwürfe unterbrochen und Beiträge automatisch veröffentlicht, wenn Sie "Entwurf speichern" ausführen. Irgendwelche anderen Lösungen?
2

Der richtige Weg, einen Beitrag automatisch als privat zu markieren, besteht darin, dies mit dem Filter wp_insert_post_data zu tun. Es ist sehr einfach:

add_filter( 'wp_insert_post_data', 'mark_post_private' );
function mark_post_private( $data ) {
    if ( 'your_post_type_goes_here' == $data['post_type'] ) {
        $data['post_status'] = 'private';
    }

    return $data;
}
Yaron
quelle
Dies ist korrekt, aber wenn Sie möchten, dass der Beitrag in den Papierkorb verschoben werden kann, sollten Sie zuerst prüfen, ob ('Papierkorb'! = $ Post ['post_status']).
Alexg