wp_insert_post unterbricht Umschreibungsregeln

Ich verwende wp_insert_post , um Inhalte programmgesteuert zu einer Site hinzuzufügen. Dies funktioniert gut mit Posts, Kategorien und Tags, aber nicht mit Seiten.

Wenn ich versuche, eine Seite hinzuzufügen (zB post mit post_type = page), werden die Rewrite-Regeln nicht richtig neu wp_insert_post (oder etwas passiert nach wp_insert_post ). Insbesondere gehen Regeln, die sich auf Kategorie- und Tag-URLs beziehen, verloren, wie nachstehend aufgeführt:

 [category/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?category_name=$matches[1]&feed=$matches[2] [category/(.+?)/(feed|rdf|rss|rss2|atom)/?$] => index.php?category_name=$matches[1]&feed=$matches[2] [category/(.+?)/page/?([0-9]{1,})/?$] => index.php?category_name=$matches[1]&paged=$matches[2] [category/(.+?)/?$] => index.php?category_name=$matches[1] [tag/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$] => index.php?tag=$matches[1]&feed=$matches[2] [tag/([^/]+)/(feed|rdf|rss|rss2|atom)/?$] => index.php?tag=$matches[1]&feed=$matches[2] 

…etc

Dies bedeutet, dass Tag-URLs und Kategorie-URLs beschädigt werden. Wenn Sie einfach auf Einstellungen> Permalinks klicken, werden sie repariert. Habe versucht, mit $wp_rewrite->flush_rules() sofort nach wp_insert_post aber das hat das Problem nicht behoben …

Solutions Collecting From Web of "wp_insert_post unterbricht Umschreibungsregeln"

Schwer zu sagen, was Ihr Problem ist, ohne mehr Code zu sehen, aber ich würde wetten, dass Ihr Problem getriggers wird, wenn Sie dies nach dem Einfügen Ihres Posts hinzufügen:

 do_action('save_post', $post_ID, $post); 

WordPress verwendet diese Aktion, um den Cache zu leeren, Regeln neu zu schreiben usw. Stellen Sie sicher, dass Sie die entsprechenden Variablen für $ post_ID und $ post natürlich verwenden. Für ein gutes Maß sollten Sie auch hinzufügen:

 do_action('wp_insert_post', $post_ID, $post); 

Nur so können Plugins, Themes usw., die diesen Hook verwenden, alles tun, was sie tun.

Prost ~

Ich habe das gleiche Problem, denke ich. Ich benutzte wp_insert_post in einem Ajax Callback. Das Feld post_name wurde ausgeblendet. Ich führte ihn schließlich zurück zum Aufruf von wp_publish_post kurz danach. Ich habe die Veröffentlichung auskommentiert und post_status vor dem Einfügen gesetzt und alles hat besser funktioniert.