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 …
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.