So erhalten Sie die aktuelle Post-ID im callback für die Schnellbearbeitung

Diese Frage bezieht sich auf eine andere zuvor gestellte Frage , bei der es sich um eine Antwort handelt.

Aufgabe

Da ich QuickEdit erweitern möchte, um etwas wirklich geniales (und mehr als nur schnelles Editieren ) zu sein, brauche ich die ID des aktuell “schnell bearbeiteten” Posts in meinen callbacken.

coremarkierung

Von dem, was ich im core in der class-wp-posts/terms-list-table.php Datei und der WP_*_List_Table#inline_edit() -function sehen kann, gibt es keine Werte für Checkboxen, Eingabefelder, etc. über PHP gesetzt . Alle werden über JavaScript eingestellt. Die Struktur sieht so aus:

  
Post Dataanother post... etc.

Benutzerdefinierte Quick-Edit-Felder

Je nachdem, was und in welcher Listentabelle (post / term) wir benutzerdefinierte Schnellbearbeitungsfelder hinzufügen möchten, müssen wir Callbacks zu Filtern hinzufügen. Auch das funktioniert nur, wenn wir eine benutzerdefinierte Spalte haben (siehe andere Frage).

 add_action( 'quick_edit_custom_box', array( $this, 'addFields' ), 10, 3 ); # add_action( 'bulk_edit_custom_box', array( $this, 'addFields' ), 10, 2 ); 

Der callback selbst hat das eigentliche Problem, vor dem ich stehe . Wir haben zwei (oder im Fall von Termen, drei) Argumente: $postType und $columnName . Beides hilft mir nicht, die tatsächliche $post_ID , die ich für wp_editor() wie den wp_editor() benötigen würde.

 public function addFields( $colName, $postType, $taxonomy = '' ) { // How to retrieve the ID of the currently quick edited post in here? } 

Solutions Collecting From Web of "So erhalten Sie die aktuelle Post-ID im callback für die Schnellbearbeitung"

Sie können die ID pro JavaScript von der Elternanzeige des Schnellbearbeitungsbildschirms erhalten: tr hat ein Attribut id="edit-418" , wobei 418 die Post-ID ist.

Also extrahiere diese Nummer, hol dir die Post-Daten per AJAX und füge die Werte ein, die du brauchst. Nicht elegant.

Lesen Sie wp-admin/js/inline-edit-post.js zu sehen, wie der core es tut.

Leider ist es unmöglich zu erweitern … Warum? Weil schnelles Editieren (für bestimmte Posts) “hardcoded” ist und nicht durch Plugins erweitert werden kann …

Um es zu beweisen, untersuchen wir den Code:

  1. Wenn Sie auf den Link inlineEditPost klicken, inlineEditPost class inlineEditPost (in der Datei inline-edit-post.js ) diese und ruft edit Methode edit . #inline_{post_id} Sie einen Blick auf 136 Zeile , hier dauert es #inline_{post_id} Container #inline_{post_id} . Wie Sie sehen, können Sie diese function nicht erweitern …

  2. #inline_{post_id} Container #inline_{post_id} wird mit der function get_inline_data($post) . Es gibt wieder keine do_action oder apply_filters und keine Möglichkeit, es zu erweitern …

  3. get_inline_data($post) function wird von der WP_Posts_List_Table class WP_Posts_List_Table , die für das Rendern der posts-Tabelle bei 608 verantwortlich ist .

Es bedeutet, dass Sie selbst dann, wenn Sie einen Weg finden, wie Sie die Post-ID für die schnelle Bearbeitung einer einzelnen Zeile erhalten, nicht viel damit machen können …


Nur teilweise verwandte Bearbeitung – triggers das Problem nicht.

Wenn Sie also zusätzliche Daten an die ausgeblendeten Felder übergeben müssen, können Sie den editable_slug Filter verwenden:

 add_filter( 'editable_slug', array( $this, 'hiddenInlineFields' ) ); /** * Allows to add fields to the hidden fields per post. * Allows inlineEditPost and other JS functions to access data from there. * @param string $postName * @return string */ public function hiddenInlineFields( $postName ) { return $postName.'
'.get_the_ID(); }