douzi1350 2016-11-26 15:22
浏览 42
已采纳

如何在wordpress中对image_meta值执行查询?

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?

  • 写回答

2条回答 默认 最新

  • dongxixia6399 2016-11-27 15:37
    关注

    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'.
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站