it-swarm.com.de

Setzen Sie den Titel des benutzerdefinierten Beitragstyps auf das Datum des Beitrags

Ich habe einen benutzerdefinierten Beitragstyp namens "Status" und den "Titel" im Beitragstyp deaktiviert. Im Moment werden alle Beiträge mit dem Titel "Auto Draft" versehen. Ich möchte eine Möglichkeit einrichten, den Titel als Datum des Posts festzulegen. Ich denke, ich sollte 'wp_insert_post_data "verwenden. Im Moment verwende ich den folgenden Code, aber er funktioniert nicht:

function status_title_filter( $data , $postarr )
{

if ($postarr['post_type'] == 'status'){
    $date = $data['post_date'];
    $data['post_title'] = $date;
}
return $data;
}

add_filter( 'wp_insert_post_data' , 'status_title_filter' , '99' );

Vielen Dank im Voraus für die Lösung meines einfachen Problems. Ich bin eine Art Neuling, wenn es um solche Dinge geht.

3
Zack Austin

Ungeachtet dessen, was der Codex sagt, wird $ postarr nicht immer weitergereicht, daher sollten Sie nur $ data verwenden. $ data ist jedoch kein aussagekräftiger Variablenname, daher bevorzuge ich $ cleanPost. Ich würde auch versuchen, die Priorität des Filters zu entfernen, da dies normalerweise nicht erforderlich ist. Es ist auch eine gute Idee, den Slug (post_name) zusätzlich zum Titel festzulegen und zu vermeiden, dass der Code bei automatischen Entwürfen und Papierkorb-/Papierkorbvorgängen ausgeführt wird. Überprüfen Sie, ob dies stattdessen funktioniert:

function status_title_filter( $cleanPost )
{
    if( $cleanPost['post_type'] == 'status' && $cleanPost['post_status'] != 'auto-draft' && $_GET['action'] != 'trash' && $_GET['action'] != 'untrash' )
        $cleanPost['post_title'] = $cleanPost['post_name'] = $cleanPost['post_date'];

    return $cleanPost;
}

add_filter( 'wp_insert_post_data', 'status_title_filter' );

Update : Ich denke, der Grund, warum Sie $ postarr nicht sehen, ist, dass standardmäßig Aktionsrückrufe nur einen Parameter akzeptieren. Wenn Sie mehr wollen, müssen Sie dies im Hook angeben, wie add_action( 'wp_insert_post_data', 'my_callback_function', 10, 2). Das würde die Priorität auf 10 und die Anzahl der Argumente auf 2 setzen.

4
Ian Dunn

Es gibt ein Plugin, das das tut - Datentitel . Vielleicht können Sie sich den Code dort ansehen und sich eine Vorstellung davon machen, wie das geht.

0
Lea Cohen

Ich weiß, dass es spät ist, aber Sie können den Titel auf das Postdatum setzen, bevor Sie den Post erstellen.

$postarr['title'] = current_time('mysql');
$postarr['post_type'] = 'myposttype';
wp_insert_post($postarr);

HTH

0
rexposadas