Thêm phụ đề vào tiêu đề sản phẩm Wooc Commerce


8

Tôi đang sử dụng WooC Commerce trên một trang web được xây dựng với Pagelines Framework. Tôi cần phải có một phụ đề / trường tùy chỉnh xuất hiện dưới tên sản phẩm bất cứ nơi nào nó xuất hiện trong trang web. Vì nó là, WooC Commerce không cung cấp tùy chọn đó.

Tôi đã thử sử dụng các trường tùy chỉnh nhưng WooC Commerce cũng sử dụng các trường này và xuất ra một loạt các nội dung tôi không muốn cùng với phụ đề của mình. Nếu tôi đặt tên trường tùy chỉnh là "tác giả sách" thì mã này có hoạt động để chỉ hiển thị trường tùy chỉnh tôi muốn không?

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

Và nếu vậy, làm cách nào để tạo đầu ra trường mới của tôi ngay sau tiêu đề sản phẩm ở mặt trước?

Tôi đã tìm thấy các hook tôi cần trong tệp php này (tôi nghĩ, tôi không biết php, đó là lý do tại sao tôi hỏi bạn):

    <?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
*/
?>

Tôi biết cách lọc ra nhưng làm cách nào để thêm vào trường tùy chỉnh vào danh sách đó?

Hay có một cách hoàn toàn khác để đạt được những gì tôi cần?

Bất tử cho bất cứ ai có thể giúp đỡ.

Câu trả lời:


5

Để trả lời câu hỏi đầu tiên của bạn, nhận được post meta»tác giả sách của bạn « theo cách này sẽ lặp lại / hiển thị như vậy. Nếu bạn đang xác định đúng biến $idtrong mã của mình - hoặc bạn có thể làm điều đó như hiển thị bên dưới.

Mã sẽ trả lời câu hỏi thứ hai của bạn, làm thế nào để chèn dòng tiêu đề thứ hai của bạn vào trang sản phẩm thông qua hook woocommerce_single_product_summary. Chỉ cần thêm thông tin bổ sung của bạn như thế này:

    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 );

Để thoải mái hơn với meta bài đăng tùy chỉnh của bạn, bạn có thể làm những gì @ pl4g4 và @brasofilo đề xuất và thêm một metabox vào màn hình chỉnh sửa sản phẩm, nhưng tất nhiên không cần thiết, bạn dường như biết cách thực hiện với tùy chỉnh wordpress tiêu chuẩn lĩnh vực metabox .


Bạn có thể thêm hộp meta của mình như thế này, mã được dựa trên ví dụ đầu tiên trên trang codex wordpress 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' );

1
+1. Với add_actionmức độ ưu tiên là 6, điều gì sẽ đặt phụ đề ngay sau tiêu đề thông thường (có mức độ ưu tiên là 5). Trong trường hợp OP không muốn thêm metabox của riêng mình, tôi đã viết một plugin phụ đề để lưu dữ liệu.
xe đạp

3

Bạn có thể thêm một metabox vào bài đăng sản phẩm. Hộp meta này phải có và hình thức nhập để bạn có thể nhập tiêu đề phụ, khi bạn đã thêm metabox lưu giá trị trong post_meta khi sản phẩm được lưu, sau đó trong trang sản phẩm duy nhất từ ​​mẫu thương mại điện tử sử dụng mã

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

để có được nó

bạn có thể tìm thấy thông tin về metaboxess ở đây và cũng ở đây


Hoặc sử dụng Trường tùy chỉnh nâng cao hoặc tìm kiếm tài liệu lưu trữ của chúng tôi .
brasofilo

+1, nhưng vui lòng không đăng liên kết đến các nguồn bên ngoài. Nếu bạn cần làm như vậy, thì vui lòng cũng triệu tập những gì được viết (mã) trong mục tiêu.
kaiser
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.