• Resolved jrothra

    (@jrothra)


    URL: https://www.johnrothra.com/store/church-growth/1x-evangelism-kingdom-growth-strategy-local-church/

    I’m wanting to add the name of the author(s) underneath the item description. However, what I’ve tried isn’t working. So here I post.

    What I Tried
    I added the custom field product_author under the item’s custom field box, and entered the name of the author (me), clicked update under the new custom field just to be sure, then clicked to update the entire product listing.

    I then copied the title.php file from plugins/woocommerce/templates/single-product/ to theme_child/woocommerce/templates/single-product/. After this, I edited the copied file by adding an H3 under the title as so:

    <h1 itemprop="name" class="product_title entry-title"><?php the_title(); ?></h1>
    <h3 class="product_author"><?php echo get_post_meta($post->ID, 'product_author', TRUE); ?></h3>

    I then cleared all caches and refreshed the page, but the author did not display. I tried altering where I put the copied file by placing it in the following locations, but none worked:

    • theme_child/woocommerce/templates/
    • theme_child/woocommerce

    What did I do wrong or miss?

    https://www.ads-software.com/plugins/woocommerce/

Viewing 15 replies - 16 through 30 (of 31 total)
  • Thread Starter jrothra

    (@jrothra)

    @lorro
    You’ve been quite helpful! In following your advice, I discovered WC will let you add custom attributes directly on the product page.

    On the individual product page, go to Product Data and look in the Attributes tab. There, with “Custom product attribute” chosen, click the “Add” button and fill in the info.

    Whatever you put will show up on the product page under “Additional Information” underneath the product image.

    That makes it simple to add the attribute. However, I’m not sure how to make the system display a custom attribute under the title instead of in the attributes list.

    Yes, and to expose the custom attribute under the title, put the code snippet beginning “global” in title.php. It doesn’t go where you put “PIT IT HERE?”, it goes right at the end, instead of the h3 line. The code snippet should begin with <?php. It prints the attribute with a p tag, not an h3, but that can be styled if wanted.

    Thread Starter jrothra

    (@jrothra)

    Gotcha. Let me try that and see how it goes.

    Thread Starter jrothra

    (@jrothra)

    Tried it, but it didn’t seem to work. I cleared all caches just to make sure, too. URL for what I mean: https://www.johnrothra.com/store/church-growth/1x-evangelism-kingdom-growth-strategy-local-church/

    Here’s the full code for the customized title.php file: https://pastebin.com/nxdC1qEc

    Also, I have it in theme_child/woocommerce/single-product

    Thread Starter jrothra

    (@jrothra)

    I tried changing this line…
    if ($attribute["name"] == "Product author")

    to this…
    if ($attribute["name"] == "Author")

    This is because what I entered in the “Name” field for the attribute is “Author” and not the other. However, after clearing the cache, still no change.

    UPDATE —
    I tried changing it to the specified slug, but that didn’t work, either:
    if ($attribute["name"] == "product-author")

    There’s two ways to do attributes, you can put them in as a taxonomy at Admin page > Products > Attributes. In this case, the code would be different.

    The code is for putting the attribute in on the product page > Product Data section > Attributes. $attribute[“name”] must equal exactly what you put in the name field. “Author” is OK. Ensure there is no space character at either end.

    Just check that you did put the code in the title.php which is at:
    wp-content/themes/customizr-child/woocommerce/single-product/title.php

    Otherwise I can’t debug it further from here, though I’ve a feeling we’re close to a resolution.

    Thread Starter jrothra

    (@jrothra)

    Okay, it’s been a couple weeks, but I’m back to looking at this.

    I made sure I added the “Author” attribute via the product page > Product Data section > Attributes location. For the “name” I listed “Author” and the value as “John L. Rothra”.

    The code I used in the title.php is as follows (using “Author” as the name:

    global $product;
      $attributes = $product->get_attributes();
      foreach ($attributes as $attribute) {
        if ($attribute["name"] == "Author") {
          $values = array_map( 'trim', explode( WC_DELIMITER, $attribute['value'] ) );
          echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
        }
      }
    
    ?>
    <h1 itemprop="name" class="product_title entry-title"><?php the_title(); ?></h1>

    However, it only lists the author in the “Additional Information” tab under the book’s cover image. The author isn’t listed under the title.

    I deleted the attribute I created under the “Attribute” section of the WP Dashboard menu.

    Thread Starter jrothra

    (@jrothra)

    CORRECTION: The author is listed above the title. So, now I only need to move it’s location.

    So, looks like that code works overall, just some design elements to deal with. I’ll leave this thread as unresolved until I move the author’s name where it should be. Then I’ll post what I did and mark it resolved at that point.

    Thread Starter jrothra

    (@jrothra)

    Here’s the code that I’m using in title.php that puts the author’s name under the title:

    if ( ! defined( 'ABSPATH' ) ) {
    	exit; // Exit if accessed directly
    }
    
    ?>
    <h1 itemprop="name" class="product_title entry-title"><?php the_title(); ?></h1>
    <?php
    global $product;
      $attributes = $product->get_attributes();
      foreach ($attributes as $attribute) {
        if ($attribute["name"] == "Author") {
          $values = array_map( 'trim', explode( WC_DELIMITER, $attribute['value'] ) );
          echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
        }
      }
    ?>

    However, due to my limited knowledge of php, I’m not sure how to add “Author:” before the name. Any ideas? This will make this problem solved.

    Before the echo, insert an extra line:

    echo 'Author: ';

    Thread Starter jrothra

    (@jrothra)

    99% of the way there. The last 1% is this: I added that line, but it now reads (on two different lines):

    Author:
    John L. Rothra

    In looking at the php and trying to learn how it’s working, I can’t figure out how to place these on the same line. Here’s the code as it looks right now:

    <?php
    global $product;
      $attributes = $product->get_attributes();
      foreach ($attributes as $attribute) {
        if ($attribute["name"] == "Author") {
          $values = array_map( 'trim', explode( WC_DELIMITER, $attribute['value'] ) );
          echo 'Author: ';
          echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );
        }
      }
    ?>

    I tried these versions, but neither worked (the second one broke the php because I guess it was invalid coding):

    echo 'Author: ';echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );

    echo 'Author: ', echo apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values );

    The product page is broken at the moment. From memory, the second echo brings in a p tag. This is a block level element so it starts a new line. We can change it to an “display:inline-block” with css so it won’t go on a new line. Come back when the product page is working so can advise the css needed.

    Thread Starter jrothra

    (@jrothra)

    I forgot to upload the valid php file. I fixed that.

    I checked the CSS via Chrome’s DevTools and it looks like that p tag is a general one, not with its own class or ID, thus it’s using the universal CSS for p. Simply changing p to be inline-block would affect everything site-wide, which obviously not what I want. Thus, a class probably needs to be added to that specific p. In the php, how might that be done?

    BTW, thank you so much for all your help.

    We’ll need to try to select that p only:

    .product .entry-summary p:nth-child(2) {display:inline-block}

    If others are affected please advise.

    Thread Starter jrothra

    (@jrothra)

    Ah, the nth-child pseudo class. It’s not something I use too often, so I didn’t think of that.

    That CSS did the trick!

    Thank you, lorro, for all your help.

Viewing 15 replies - 16 through 30 (of 31 total)
  • The topic ‘Adding Product Author’ is closed to new replies.