A3O
A3O

Reputation: 513

How to perform a query on an image_meta value in wordpress?

In my site I have the next code snippet:

<span class='legenda'>
<?php _e('Artist:','twentytwelve_child');?>
</span>
<?php printf ( ' ' . $metadata[image_meta][credit]);?>

The last piece [credit] give me the name of the artist.

Please can anyone tell me how to turn the outputted artist name into a query that searches the WooCommerce product database and show me all the products for that artist?

EDIT: In every image is default some IPTC/EXIF data stored. With the following code line I retrieve the data from the array [image_meta]. <?php $filedimensions = wp_get_attachment_metadata( $post_thumbnail_id, FALSE ); ?>

In this array is a field [credit] what holds the name of the Artist. See screenshot. enter image description here

The name (in this case Adrie Oosterwijk) must be turned into a link. After clicking an archive page has to be shown with all the images from (in this case) Adrie Oosterwijk. So I have to find a way to query all of this [credit] fields and return all images from the respective Artist.

EDIT 2 Eleborate on my comments:

Concerning the search remark: When on the admin dashboard I click on the products tab. Here I see the products listed with the respective taxonomies. On the top-right is a search field to searc the products, for instance by category or tag. However when I search on the taxonomy Photographer (I renamed artist to Photographer (see screenshot below),

enter image description here

it returns no results. (see screenshot below)

enter image description here

Any idea why this is happening?

Concerning the translate remark: I'm using WPML for the translation of my site. At this moment there is English as default language and Dutch as second one. When I add a product the Photographer (or artist as we called it at first) is perfectly added to the Custom Taxonomy 'photographers'. However when I translate the product from English to Dutch and try to translate the Taxonomy Photographer, what by the way shouldn't be nesaccery because it concerns personal names, the taxonomy name is not listed by WPML (see screenshot below)

enter image description here

The behavior of taxonomy translation is shown at the products->edit screen See screenshot below.

enter image description here

As we can see the Taxonomy 'Photographers' is listed but the handling is set to Do Nothing. Normally it is set to Copy. However Copy is not visible here and therefor can't be selected. It would be great when it is set to Copy by default.

At this moment when I list the products for the Dutch language the taxonaomy Photographers remain empty.

Any idea on how to adddress this two things?

Upvotes: 0

Views: 257

Answers (2)

Mike Aron
Mike Aron

Reputation: 580

Add this code to your functions.php or create a new plugin:

// action call to register a taxonomy
add_action( 'init', 'artist_to_product' );

// function for registering artist taxonomy
function artist_to_product()  {
$labels = array(
    'name'                       => 'Artists',
    'singular_name'              => 'Artist',
    'menu_name'                  => 'Artist',
    'all_items'                  => 'All Artists',
    'new_item_name'              => 'New Artist Name',
    'add_new_item'               => 'Add New Artist',
    'edit_item'                  => 'Edit Artist',
    'update_item'                => 'Update Item',
    'separate_items_with_commas' => 'Separate Artists with commas',
    'search_items'               => 'Search Artists',
    'add_or_remove_items'        => 'Add or remove Artists',
    'choose_from_most_used'      => 'Choose from the most used Artists',
);
$args = array(
    'labels'                     => $labels,
    'hierarchical'               => false, // we dont need hierarchical artists
    'public'                     => true,
    'show_ui'                    => true, // you can set it to false if you want
    'show_admin_column'          => true, // you can set it to false if you want
    'show_in_nav_menus'          => true, // show in product menu bar?
    'show_tagcloud'              => true, // you can set it to false if you want
);

// register the taxonomys
register_taxonomy( 'artist', 'product', $args );
register_taxonomy_for_object_type( 'artist', 'product' );
}

/** 
 * You have now an ARTIST taxonomy in your products
 * Your taxonomy link: http://www.yourdomain.com/artist/the-artist-name/
 * Dont forget to flush your permalinks: Settings->Permalinks and save as it is.

 * You can add manuel an artist or do it automaticly
 * for automaticly adding on save/update a product
 */

/**
 * Save post metadata when a post is saved.
 *
 * @param int $post_id The post ID.
 * @param post $post The post object.
 * @param bool $update Whether this is an existing post being updated or not.
 */
function save_artist_meta( $post_id, $post, $update ) {

    /*
     * In production code, $slug should be set only once in the plugin,
     * preferably as a class property, rather than in each function that needs it.
     */
    $post_type = get_post_type($post_id);

    // If this isn't a 'product' post, don't update it.
    if ( "product" != $post_type ) return;

    // - Update the post's taxonomy.
    // GET YOUR ARTIST NAME FROM IMAGE
    // i dont know how you retrierve it
    // is it from thumbnail or from other images? i dont know

    //Example:
    $artist_name = 'Leonardo Da Vinci'; // can be comma seperated like: 'Leonardo Da Vinci, Van Gogh' or an array of artists

    // set taxonomy to post
    // make a check
    if( empty($artist_name) ) return;

    $taxonomy = 'artist';
    $append = false; // we dont want to append, we want to replace it.
    wp_set_object_terms( $post_id, $artist_name, $taxonomy, $append );

}
add_action( 'save_post', 'save_artist_meta', 99, 3 );

How to get a taxonomy for the frontend:

// wp function to get the artists from a post as object
$post_id = 46772; // your post id or post object
$taxonomy = 'artist';
$artists_from_post = get_the_terms( $post_id, $taxonomy );

// wp function to get the artists url
$taxonomy_slug = 'deny-de-vito'; // the slug of your artist taxonomy from above
$taxonomy = 'artist';
$artist_url = get_term_link( $taxonomy_slug, $taxonomy );

Now, how to find a slug only by the plain text/artists name? if you saved the artist name automaticly by this function, so we can use the wp sanitize_title function:

 $artist_name_from_image = 'Leonardo Da Vinci';
 $artist_slug = sanitize_title( $artist_name_from_image );
// this wil produce: 'leonardo-da-vinci'.

Upvotes: 1

Mike Aron
Mike Aron

Reputation: 580

i cant comment so i write it here. Its totaly based on your template or plugin. Please provide more information about how your products are saved in your shop, is there a meta key 'artist' on each product? or do your plugin/template save artists data in db rows/colums? As i know woocommerce dont have a artists attribute as default.

Upvotes: 0

Related Questions