Hat jemand eine Idee, was an dem Code falsch sein könnte?
Ganz, ganz viel :D
Die Foreach Schleife ist falsch. $posts enthält Objekte und keine IDs. Und warum willst Du das nur für 30 Einträge machen?
Warum weist Du den Tax-Term zweimal zu? Entweder wp_set_post_terms() oder wp_set_object_terms(). Verwende wp_set_post_terms(), da es ein Wrapper für wp_set_object_terms() mit zusätzlichen Prüfroutinen ist.
Ist die Taxonomy 'alter' hierarchisch? Dann muss die ID des Terms in wp_set_post_terms() verwendet werden.
Bitte gewöhne Dir an den Rückgabewert einer Funktion zu prüfen. Also
$posts = get_posts( array( 'post_type' => 'person' ) );
$term_id = 55;
$taxonomy = "alter";
foreach( $posts as $post ){
$set_terms = wp_set_post_terms( $post->ID, $term_id, $taxonomy, false);
if( false === $set_terms || is_wp_error( $set_terms ) ) {
// fehlerauswertung
}
}
Und den Cronjob installierst Du in register_activation_hook(). Wenn das Ganze nur einmal zum nachträglichen Zuweisen des Terms laufen soll, macht man das mit wp_schedule_single_event()
ps: Bei der Programmierung schaltet man immer den Debug Modus von WordPress ein, damit man die gröbsten Fehler schon mal entfernen kann, bevor man Hilfe im Forum sucht. ;)