Speichern Sie benutzerdefinierten Post-Typ nicht funktioniert

Ich habe ein merkwürdiges Problem mit demselben Code, der nicht auf localhost gegen Produktionsserver funktioniert.

Der Code ist einfach und ich versuche, einen benutzerdefinierten Beitragstyp zu speichern, aber keine Daten in meinen Metaboxen werden gespeichert. Ich habe einige echo statementen in meinem save_custom_type zum Debuggen, um zu sehen, wie die Daten aussehen. Nicht einmal diese Druckanweisungen werden wiederholt, wenn ich in der Produktionsumgebung auf “Veröffentlichen” drücke.

Der benutzerdefinierte Beitragstyp ist in meinem Thema erstellt, ich hook in die Aktion ‘init’.

Code für die Erstellung und erste Zeilen bis zur ersten echo-statement in der Speichermethode.

 function create_omgang_post_type() { $labels = array( 'name' => 'Omgång', 'add_new' => 'Lägg till ny omgång', 'add_new_item' => 'Lägg till ny omgång', 'not_found' => 'Inga omgångar inlagda' ); $args = array( 'description' => 'En omgång för denna säsong', 'public' => true, 'hierarchical' => true, 'show_in_menu' => false, 'show_in_admin_bar' => true, 'label'=>'Omgångar', 'labels' => $labels, 'supports' => array( 'title', 'page-attributes') ); register_post_type('omgang', $args); } add_action('init', 'create_omgang_post_type'); /*-------------------------------------*/ function save_custom_post_omgang($post_id) { $slug = 'omgang'; $post = get_post($post_id); if($post->post_type == "omgang" ) { if(! $_POST) return; if(!wp_post_revision_title($post_id)) { $lag = get_all_lag(); $data = array(); foreach($_POST as $key => $value) { //key#type $explodedID = explode('#', $key); if($explodedID[0] != $key) { $key = $explodedID[0]; $type = $explodedID[1]; $data[$key][$type] = $value; } } print_r($data); //this line is not even printed in PRD } } } 

Solutions Collecting From Web of "Speichern Sie benutzerdefinierten Post-Typ nicht funktioniert"

Das Problem mit Meta-Boxen und Speichern im Allgemeinen mit WordPress ist, dass es wirklich nervig ist zu debuggen. Dies liegt daran, wie WordPress es tut.

Wenn Sie Publish drücken, sendet WordPress eine AJAX-Anforderung, um den Post zu speichern. Dies ist, was Ihre sicheren Handler aufruft. Und wenn diese Anfrage zurückkehrt, hat sie einen Location Header, der WordPress mitteilt, auf welche Seite umgeleitet werden soll (normalerweise eine, die eine Nachricht wie “Post Updated” anzeigt).

Das Problem dabei ist, dass es jede Debug-statement in Vergessenheit gerät. Es macht es absolut horrend, Meta-Boxen zu debuggen, weil man die Ausgabe während der Speicherroutine nie wirklich sieht.

Der einfachste Weg, um dies zu umgehen, ist einen exit; statement direkt nach Ihrer Debug-Nachricht. Ja, die gesamte Seite wird nicht ausgeführt, aber Sie können Ihre Debug-Ausgabe sehen.


Das Problem, das ich gerade mit Ihrem Code sehe, ist, dass Sie nie update_post_meta oder add_post_meta . Ohne eine dieser functionen zum Speichern der Daten zu verwenden (und später get_post_meta automatisch mit get_post_meta ), speichern Sie Ihre Daten nicht.