Ist es möglich, eine Post-ID von 2 verschiedenen benutzerdefinierten Post-Typen zu erhalten, die in denselben Post eingebettet sind, um update_post_meta vom Frontend aus auszuführen?

Ich habe einen benutzerdefinierten Beitragstyp “Kampagne”, der Details (einen Absatz oder so) zu einer bestimmten Ursache enthält.

Auf dem gleichen Post existiert ein “Spenden” -Formular (um Benutzerdetails, Spendenbetrag usw. zu posten) für die Zahlungsverarbeitung, die den Spendenposttyp fmeta vom Frontend aktualisiert.

Um das Spenden-Post-Meta zu aktualisieren, muss es jedoch die globale $ post_id des Spenden-Post-Typs erhalten, aber den Kampagnen-Post-Typ auswählen.

Hier ist der Formularcode:

   

ID) ); ?>

Your Donation


'cause','posts_per_page' => -1,); $myposts = get_posts( $args ); foreach ( $myposts as $post ) : setup_postdata( $post ); ?> ?> <option value="">

USD KES ZAR











<input type="hidden" name="donation_id" id="donation_id" value=""> <input type="hidden" name="cause_id" id="cause_id" value="">

Und hier ist der Spenden-Metabox-Code:

 /** * Generated by the WordPress Meta Box Generator */ class Donation_Meta_Box { private $screens = array( 'donation', ); private $fields = array( array( 'id' => 'donation-id', 'label' => 'donation_id', 'type' => 'number', ), array( 'id' => 'cause-id', 'label' => 'cause_id', 'type' => 'number', ), array( 'id' => 'cause-title', 'label' => 'cause_title', 'type' => 'text', ), array( 'id' => 'donation-currency', 'label' => 'donation_currency', 'type' => 'text', ), array( 'id' => 'cause-amount', 'label' => 'cause_amount', 'type' => 'number', ), array( 'id' => 'full-name', 'label' => 'full_name', 'type' => 'text', ), array( 'id' => 'email', 'label' => 'email', 'type' => 'email', ), /*array( 'id' => 'donation-permissions', 'label' => 'donation_permissions', 'type' => 'text', ), array( 'id' => 'subscription', 'label' => 'subscription', 'type' => 'text', ),*/ ); /** * Class construct method. Adds actions to their respective WordPress hooks. */ public function __construct() { add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) ); add_action( 'save_post', array( $this, 'save_post' ) ); } /** * Hooks into WordPress' add_meta_boxes function. * Goes through screens (post types) and adds the meta box. */ public function add_meta_boxes() { foreach ( $this->screens as $screen ) { add_meta_box( 'donations-metabox', __( 'Donations Metabox', 'amref_2017' ), array( $this, 'add_meta_box_callback' ), $screen, 'advanced', 'default' ); } } /** * Generates the HTML for the meta box * * @param object $post WordPress post object */ public function add_meta_box_callback( $post ) { wp_nonce_field( 'donations_metabox_data', 'donations_metabox_nonce' ); echo 'Donations Metabox Boilerplate'; $this->generate_fields( $post ); } /** * Generates the field's HTML for the meta box. */ public function generate_fields( $post ) { $output = ''; foreach ( $this->fields as $field ) { $label = ''; $db_value = get_post_meta( $post->ID, 'donations_metabox_' . $field['id'], true ); switch ( $field['type'] ) { default: $input = sprintf( '', $field['type'] !== 'color' ? 'class="regular-text"' : '', $field['id'], $field['id'], $field['type'], $db_value ); } $output .= $this->row_format( $label, $input ); } echo '' . $output . '
'; } /** * Generates the HTML for table rows. */ public function row_format( $label, $input ) { return sprintf( '%s%s', $label, $input ); } /** * Hooks into WordPress' save_post function */ public function save_post( $post_id ) { if ( ! isset( $_POST['donations_metabox_nonce'] ) ) return $post_id; $nonce = $_POST['donations_metabox_nonce']; if ( !wp_verify_nonce( $nonce, 'donations_metabox_data' ) ) return $post_id; if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return $post_id; foreach ( $this->fields as $field ) { if ( isset( $_POST[ $field['id'] ] ) ) { switch ( $field['type'] ) { case 'email': $_POST[ $field['id'] ] = sanitize_email( $_POST[ $field['id'] ] ); break; case 'text': $_POST[ $field['id'] ] = sanitize_text_field( $_POST[ $field['id'] ] ); break; } update_post_meta( $post_id, 'donations_metabox_' . $field['id'], $_POST[ $field['id'] ] ); } else if ( $field['type'] === 'checkbox' ) { update_post_meta( $post_id, 'donations_metabox_' . $field['id'], '0' ); } } } } new Donation_Meta_Box;

Ich benutze die ID der Kampagne, um die Beziehung zwischen den beiden Beitragstypen herzustellen, also verwende ich keine Plugins wie Post 2 Post oder Pods (es sei denn, es wurde auf Grund meines Problems empfohlen)

Poster zum ersten Mal, danke für deine Zeit.

Solutions Collecting From Web of "Ist es möglich, eine Post-ID von 2 verschiedenen benutzerdefinierten Post-Typen zu erhalten, die in denselben Post eingebettet sind, um update_post_meta vom Frontend aus auszuführen?"

Die globale $post Variable ist das aktuelle Post-Objekt (Seite), das ein Benutzer anfordert.

Wenn Sie diese Variable verwenden, um die Post-ID abzurufen, erhalten Sie den Post der aktuellen Seite. Wenn Sie ein Post-Meta auf einer anderen Seite aktualisieren müssen, müssen Sie die post_id der Seite angeben, aber hohe Chancen, dass dies nicht von der globalen $post Variable abhängig von Ihrer Beschreibung erfolgt.

Beachten Sie, dass Post-IDs für alle Post-Typen eindeutig sind. Eine einfache Möglichkeit, die Verbindung zwischen Posts herzustellen, ist die Verwendung von Post-Meta, wo Sie die Post- post_id des zugehörigen post_id speichern können.

Beispiel:

 $related_post_id = get_post_meta($post_id,'related_post',true); //get post id of the related post and return as single update_post_meta($related_post_id,'metakeyyouwanttoupdate','value here'); //do the updates!