Okay
  Public Ticket #2436912
Books author page
Closed

Comments

  • magy_o started the conversation

    Hi! I bought your theme today.

    I did it after searching (a lot) themes to make a bookstore. I had a previous theme that became a nightmare and i had to find a new one. 

    Your have what i need, but after importing the demo of book store i can't find the way to make the author name link to the author page. I know the book-author is an attribute of the the product, but in the demo it does not link anywhere.

    Thanks!!

  • [deleted] replied

    Hi Margarida,

    Here is how the Author attribute works (see video: https://d.pr/v/88DcKg) it's behavior is as WooCommerce serves by default.

    Thanks!

  • magy_o replied

    Hi! Thank you for the reply. 

    I had to ad some code to functions.php file. Otherwise the link would not work. 

    I leave it here, if someone asks you the same thing :)

    Thanks!

    Margarida

    /** * Register term fields */
    add_action( 'init', 'register_attributes_url_meta' );
    function register_attributes_url_meta() {        $attributes = wc_get_attribute_taxonomies();
            foreach ( $attributes as $tax ) {            $name = wc_attribute_taxonomy_name( $tax->attribute_name );
                add_action( $name . '_add_form_fields', 'add_attribute_url_meta_field' );            add_action( $name . '_edit_form_fields', 'edit_attribute_url_meta_field', 10 );            add_action( 'edit_' . $name, 'save_attribute_url' );            add_action( 'create_' . $name, 'save_attribute_url' );        }
    }
    /** * Add term fields form */
    function add_attribute_url_meta_field() {
        wp_nonce_field( basename( __FILE__ ), 'attrbute_url_meta_nonce' );    ?>
        <div class="form-field">        <label for="attribute_url"><?php _e( 'URL', 'domain' ); ?></label>        <input type="url" name="attribute_url" id="attribute_url" value="" />    </div>    <?php
    }
    /** * Edit term fields form */
    function edit_attribute_url_meta_field( $term ) {
        $url = get_term_meta( $term->term_id, 'attribute_url', true );    wp_nonce_field( basename( __FILE__ ), 'attrbute_url_meta_nonce' );    ?>    <tr class="form-field">        <th scope="row" valign="top"><label for="attribute_url"><?php _e( 'URL', 'domain' ); ?></label></th>        <td>            <input type="url" name="attribute_url" id="attribute_url" value="<?php echo esc_url( $url ); ?>" />        </td>    </tr>    <?php
    }
    /** * Save term fields */
    function save_attribute_url( $term_id ) {    if ( ! isset( $_POST['attribute_url'] ) || ! wp_verify_nonce( $_POST['attrbute_url_meta_nonce'], basename( __FILE__ ) ) ) {        return;    }
        $old_url = get_term_meta( $term_id, 'attribute_url', true );    $new_url = esc_url( $_POST['attribute_url'] );
        if ( ! empty( $old_url ) && $new_url === '' ) {        delete_term_meta( $term_id, 'attribute_url' );    } else if ( $old_url !== $new_url ) {        update_term_meta( $term_id, 'attribute_url', $new_url, $old_url );    }
    }
    /** * Show term URL */
    add_filter( 'woocommerce_attribute', 'make_product_atts_linkable', 10, 3 );
    function make_product_atts_linkable( $text, $attribute, $values ) {    $new_values = array();    foreach ( $values as $value ) {
            if ( $attribute['is_taxonomy'] ) {            $term = get_term_by( 'name', $value, $attribute['name'] );            $url = get_term_meta( $term->term_id, 'attribute_url', true );
                if ( ! empty( $url ) ) {                $val = '<a href="' . esc_url( $url ) . '" title="' . esc_attr( $value ) . '">' . $value . '</a>';                array_push( $new_values, $val );            } else {                array_push( $new_values, $value );            }        } else {            $matched = preg_match_all( "/\[([^\]]+)\]\(([^)]+)\)/", $value, $matches );
                if ( $matched && count( $matches ) == 3 ) {                $val = '<a href="' . esc_url( $matches[2][0] ) . '" title="' . esc_attr( $matches[1][0] ) . '">' . sanitize_text_field( $matches[1][0] ) . '</a>';                array_push( $new_values, $val );            } else {                array_push( $new_values, $value );            }        }    }
        $text = implode( ', ', $new_values );
        return $text;
    }


  • [deleted] replied

    Hi Margarida,

    Thanks for your code, I'm sure that it will come to hand for any user that uses search inside the forum.

    Have a great weekend!