Untertitel zum Woocommerce-Produkttitel hinzufügen

8

Ich verwende WooCommerce auf einer Site, die mit Pagelines Framework erstellt wurde. Ich muss ein Untertitel- / anpassbares Feld unter dem Produktnamen an einer beliebigen Stelle auf der Website anzeigen lassen. WooCommerce bietet diese Option derzeit nicht an.

Ich habe versucht, benutzerdefinierte Felder zu verwenden, aber WooCommerce verwendet diese auch und gibt eine Reihe von Dingen aus, die ich nicht zusammen mit meinem Untertitel haben möchte. Wenn ich mein benutzerdefiniertes Feld "Buchautor" nennen würde, würde dieser Code funktionieren, um nur das gewünschte benutzerdefinierte Feld anzuzeigen?

<?php echo get_post_meta($id, "bookauthor", true); ?>

Und wenn ja, wie mache ich meine neue Feldausgabe direkt nach dem Produkttitel im Frontend?

Ich habe die Haken gefunden, die ich in dieser PHP-Datei brauche (ich glaube, ich kenne PHP nicht, deshalb frage ich dich):

    <?php 
/*
  * @hooked woocommerce_template_single_title - 5
  * @hooked woocommerce_template_single_price - 10
  * @hooked woocommerce_template_single_excerpt - 20
  * @hooked woocommerce_template_single_add_to_cart - 30
  * @hooked woocommerce_template_single_meta - 40
  * @hooked woocommerce_template_single_sharing - 50
*/
?>

Ich weiß, wie man herausfiltert, aber wie füge ich das benutzerdefinierte Feld zu dieser Liste hinzu?

Oder gibt es einen ganz anderen Weg, um das zu erreichen, was ich brauche?

Unermüdliche Dankbarkeit an alle, die helfen können.

loulousantaana
quelle

Antworten:

5

Um Ihre erste Frage zu beantworten post meta, wird genau das angezeigt, wenn Sie Ihren »Buchautor« auf diese Weise erreichen. Wenn Sie die Variable $idin Ihrem Code richtig definieren - oder Sie können dies wie unten gezeigt tun.

Der Code sollte Ihre zweite Frage beantworten, wie Sie Ihre zweite Titelzeile über den Hook in die Produktseite einfügen können woocommerce_single_product_summary. Fügen Sie einfach Ihre zusätzlichen Informationen wie folgt hinzu:

    function wpse116660_wc_add_2nd_title() {
        ?>
        <div class="2nd-tile">
            <?php echo get_post_meta(get_the_ID(), "bookauthor", true); ?>
        </div>
        <?php
    }
    add_action( 'woocommerce_single_product_summary', 'wpse116660_wc_add_2nd_title', 6 );

Um mehr Komfort mit Ihrem benutzerdefinierten Post-Meta zu haben, können Sie die Vorschläge von @ pl4g4 und @brasofilo ausführen und dem Produktbearbeitungsbildschirm eine Metabox hinzufügen. Dies ist jedoch nicht unbedingt erforderlich. Sie scheinen zu wissen, wie dies mit dem benutzerdefinierten Standard-WordPress zu tun ist Felder Metabox .


Sie können Ihre Meta-Box folgendermaßen hinzufügen. Der Code basiert auf dem ersten Beispiel auf der WordPress-Codex-Seite add_meta_box .

/**
 * Adds a box to the main column on the Post and Page edit screens.
 */
function wpse116660_wc_2nd_title_mb() {

    $screen = array( 'product' );

        add_meta_box(
            'wc_2nd_title_mb',
            __( '2nd title', 'your_textdomain' ),
            'wc_2nd_title_inner_mb',
            $screen,
            'advanced',
            'high'
        );
}
add_action( 'add_meta_boxes', 'wpse116660_wc_2nd_title_mb', 0 );

/**
 * Prints the box content.
 * 
 * @param WP_Post $post The object for the current post/page.
 */
function wpse116660_wc_2nd_title_inner_mb( $post ) {

  // Add an nonce field so we can check for it later.
  wp_nonce_field( 'wc_2nd_title_inner_mb', 'wc_2nd_title_inner_mb_nonce' );

  /*
   * Use get_post_meta() to retrieve an existing value
   * from the database and use the value for the form.
   */
  $value = get_post_meta( $post->ID, 'bookauthor', true );

  echo '<label for="bookauthor_field">';
       _e( "Bookauthor", 'your_textdomain' );
  echo '</label> ';
  echo '<input type="text" id="bookauthor_field" name="bookauthor_field" value="' . esc_attr( $value ) . '" size="50" />';

}

/**
 * When the post is saved, saves our custom data.
 *
 * @param int $post_id The ID of the post being saved.
 */
function wpse116660_wc_2nd_title_save_postdata( $post_id ) {

  /*
   * We need to verify this came from the our screen and with proper authorization,
   * because save_post can be triggered at other times.
   */

  // Check if our nonce is set.
  if ( ! isset( $_POST['wc_2nd_title_inner_mb_nonce'] ) )
    return $post_id;

  $nonce = $_POST['wc_2nd_title_inner_mb_nonce'];

  // Verify that the nonce is valid.
  if ( ! wp_verify_nonce( $nonce, 'wc_2nd_title_inner_mb' ) )
      return $post_id;

  // If this is an autosave, our form has not been submitted, so we don't want to do anything.
  if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
      return $post_id;

  // Check the user's permissions.
  if ( 'page' == $_POST['post_type'] ) {

    if ( ! current_user_can( 'edit_page', $post_id ) )
        return $post_id;

  } else {

    if ( ! current_user_can( 'edit_post', $post_id ) )
        return $post_id;
  }

  /* OK, its safe for us to save the data now. */

  // Sanitize user input.
  $mydata = sanitize_text_field( $_POST['bookauthor_field'] );

  // Update the meta field in the database.
  update_post_meta( $post_id, 'bookauthor', $mydata );
}
add_action( 'save_post', 'wpse116660_wc_2nd_title_save_postdata' );
Nicolai
quelle
1
+1. Das add_actionmit einer Priorität von 6 setzt den Untertitel direkt nach dem regulären Titel (der eine Priorität von 5 hat). Für den Fall, dass das OP keine eigene Metabox hinzufügen möchte, habe ich bereits ein Untertitel-Plugin geschrieben , das die Daten speichert.
Helgatheviking
3

Sie können dem Produktbeitrag eine zusätzliche Metabox hinzufügen. Dieses Meta-Feld sollte ein Eingabeformular haben, damit Sie den Untertitel eingeben können. Wenn Sie die Metabox hinzugefügt haben, speichern Sie den Wert in post_meta, wenn das Produkt gespeichert wird, und verwenden Sie dann auf der einzelnen Produktseite aus der Woocommerce-Vorlage den Code

<?php echo get_post_meta($id, "bookauthor", true); ?>

es bekommen.

Informationen zu Metaboxess finden Sie hier und auch hier

pl4g4
quelle
Oder verwenden Sie erweiterte benutzerdefinierte Felder oder durchsuchen Sie unsere Archive .
Brasofilo
+1, aber bitte poste keine Links zu externen Quellen. Wenn Sie dies tun müssen, rufen Sie bitte auch auf, was im Ziel geschrieben (Code) steht.
Kaiser