In magento customization tool, you can put file upload option
but I would like that When you upload an image preview in the screen at least when you click on edit the product
which is the variable of the loaded image?
With The URL of the cart image link:
htt....MY-WEB.com/sales/download/downloadCustomOption/id/107/key/a5cae363d3d6cde2e9c6/
I test with:
img src=..
this URL and display ok, but which is the variable that takes this to interfere with an echo
Here they do with flash but if you do not have flash detected with ajax
http://demo.micosolutions.com/afup/ajax-flash-upload-pro-demo/ajax-flash-uploader-demo.html
I think these are the files that can talk about this:
app/design/frontend/base/default/template/catalog/product/view/options/type/file.phtml
app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Options/Type/file.php
Edit Deleted old answer because I misunderstood the question.
Ok this time I hope I understood correctly what you want. To get the URL of an custom option image from a product that was added to the cart you can get it from quote item:
$item = $this->getItem();
$optionIds = $item->getOptionByCode('option_ids');
if( $optionIds ) {
$options = array();
foreach( explode( ',', $optionIds->getValue() ) as $optionId ) {
$option = $this->getProduct()->getOptionById( $optionId );
if( $option->getData( 'type' ) == 'file' ) {
$option = $item->getOptionByCode( 'option_' . $optionId );
$value = unserialize( $option->getData( 'value' ) );
var_dump( $value );
var_dump( Mage::getUrl( 'sales/download/downloadCustomOption', array( 'id' => $option->getId(), 'key' => $value[ 'secret_key' ] ) ) );
echo '<img src="' . Mage::getUrl( 'sales/download/downloadCustomOption', array( 'id' => $option->getId(), 'key' => $value[ 'secret_key' ] ) ) . '"/>';
}
}
}
Output: It var dumps download url and $value content ($value[ 'fullpath' ] is the location of the image file but it is forbiddon to access it from a browser - you will have to move the file to a different location in media folder where it will be accessable from the web).
echo will show the image.
$item is of type Mage_Sales_Model_Quote_Item (this code was tested in checkout/cart/index controller - your_page_url/index.php/checkout/cart -> code can be added at the top of template/checkout/cart/item/default.phtml file to see how it works).
Related
I'm trying to amend a Wordpress template so that the thumbnail of a single post links to an external url. I have collected the url in a custom field (report_link).
I've tried a bunch of combinations of dots and apostrophes and speech quotes, but I think I must be missing something fundamental.
<?php
if ( has_post_thumbnail() ) {
$replink=the_field('report_link');
if( $thumbnail = get_the_post_thumbnail( null, 'slider', array( 'class' => 'img-fluid' ) ) ){
echo "<a href='$replink'>$thumbnail</a>";
}
}
?>
When I try to use $replink in the href the link on the thumbnail is back to the same post's url.
I also tried:
echo 'Click';
This returned the url in $replink printed to the screen and then a the word 'Click' which was linked back to the post page containing the link.
You can make use of below function to make it work.
if ( has_post_thumbnail() ) {
$replink = get_field('report_link');
if( $thumbnail = get_the_post_thumbnail( null, 'slider', array( 'class' => 'img-fluid' ) ) ){
echo "<a href='".$replink."'>".$thumbnail."</a>";
}
}
I’m trying to make a simple document management system with ACF's repeater field. I need to print a button to download a file attached to the the top repeater field (with the size and filetype of the download). But if the top repeater field is empty, it should print “file not available” content.
I’m pretty new to PHP but this mostly works so far:
$repeater = get_field( 'document' )[0];
if( $repeater ) {
$fileurl = $repeater[ 'document' ][ 'url' ];
$filesize = filesize( get_attached_file ($repeater[ 'file' ][ 'id' ]) );
$filesize = size_format($filesize);
$filetype = wp_check_filetype( get_attached_file ($repeater[ 'file' ][ 'id' ]));
$download = '<div>Download<div>' . $filesize . ' <span>' . $filetype[ 'ext' ] .'</span></div></div>' ;
echo $download;
}
This prints a button to the attached file in the top repeater, when there is an attached file in the top repeater. Only it prints out a dead link if there is nothing in the top repeater. This won’t do. I need to add an else condition or something so that it prints "file not available" content if there is nothing in the first repeater.
if(empty( $repeater )) {
$unavailable = '<div>Unavailable<div>This document isn\'t ready yet. Please check back later.</div></div>' ;
echo $unavailable;
}
I've tried a lot of different ways to do this, such as above, and I don't know what I'm doing wrong. Can you help?
You have to check for a value before displaying field like that :
if( get_field('document'){
... // there is an attached file
}
else {
$unavailable = '<div>Unavailable<div>This document isn\'t ready yet. Please check back later.</div></div>' ;
echo $unavailable;
}
I think they had your case at the ACF support forum: https://support.advancedcustomfields.com/forums/topic/if-repeater-field-if-empty-else-doesnt-work/
I finally got it! I think I wasn't declaring my variables clearly enough.
$row = get_field( 'document' );
$first_row = $row[0];
$first_row_file = $first_row[ 'file' ];
if( $first_row_file ) :
$download = '<div>Available!<div>This document is ready for download.</div></div>' ;
echo $download;
else :
$unavailable = '<div>Unavailable!<div>This document isn\'t ready yet. Please check back later.</div></div>' ;
echo $unavailable;
endif;
Now I can add more sophisticated content (like a download button) to display when there is a file to download, and a helpful message when there isn't.
I'm trying to make a download script for a password protected wordpress site. To make use of PHPs readfile() function I need to retrieve the full attachment URL based on it's ID i am passing to the download script.
I made a Custom Post Type named Downloads and also changed it's upload directory to a folder inside wp-content also named downloads.
Here is the code for it:
add_filter( 'upload_dir', 'custom_upload_directory' );
function custom_upload_directory( $args ) {
$id = $_REQUEST['post_id'];
$parent = get_post( $id )->post_parent;
if( "downloads" == get_post_type( $id ) || "downloads" == get_post_type( $parent ) ) {
$args['path'] = WP_CONTENT_DIR . '/downloads';
$args['url'] = WP_CONTENT_URL . '/downloads';
}
return $args;
}
Upload works fine and when I click the link to the desired file, the ID is passed to a script via $_POST, which also works fine. But I just can't figure out a way to get the right file URL. Here's what I tried:
wp_get_attachment_url( $id ); // returns: example.com/wp-content/uploads/html/theme/wp-content/downloads/filename.ext
wp_get_attachment_link( $id ); // returns: slug
get_attachment_link( $id ); // returns: example.com/downloads/file (without .ext)
get_attached_file( $id, true ); // returns: html/theme/wp-content/downloads/filename.ext
get_post_meta( $id, '_wp_attached_file', false ); // returns: html/theme/wp-content/downloads/filename.ext
wp_get_attachment_metadata( $id ); // returns nothing
What I expected any of those functions to return was example.com/wp-content/downloads/filename.ext
But as you can see, some mix up the default upload directory and combine it with the new one while others just return half of the full URL (html/theme/... it's the directory the website sits on the server). So any ideas would be appreciated.
Hours, days and even weeks later I finally found an answer and modified it to fit my needs. I came as far as displaying the right URL (the modified one) inside the file upload lightbox of Wordpress. But after publishing/updating the post it went back to the same old .../wp-content/uploads/file.ext URL.
Someone else, somewhere else got exactly the same problem and fortunately it is said there, that you must not just alter $args['path'] and $args['url'] but you also have to alter basedir, baseurl and subdir.
So, the complete code to change a custom post types upload directory (in this case I chose the directory .../wp-content/downloads) is the following:
add_filter( 'upload_dir', 'change_upload_dir' );
function change_upload_dir( $args ) {
$id = $_REQUEST['post_id'];
if( get_post_type( $id ) == 'downloads' ) {
$args['basedir'] = wp_normalize_path( WP_CONTENT_DIR . 'downloads' );
$args['baseurl'] = content_url() . '/downloads';
$args['path'] = $args['basedir'];
$args['url'] = $args['baseurl'];
$args['subdir'] = '';
return $args;
}
}
So now, calling wp_get_attachment_url() finally results in something like example.com/wp-content/downloads/file.ext
I've added multiple featured images to my wordpress site using the multiple post thumbnail plugin. I'm trying to display them all underneath the content with their descriptions. I can do it for the main featured image no problem. I can display the rest of the featured images no problem, but whenever I try to add description by it's the page description not the image description.
This is how I added the main image and description.
<?php the_post_thumbnail( 'product-thumbnail' );
echo get_post(get_post_thumbnail_id())->post_content; ?>
The remaining images are added as such:
<?php MultiPostThumbnails::the_post_thumbnail(get_post_type(), 'secondary-
image', NULL, 'product-thumbnail');
?>
And so forth (third, fourth)..
Can somebody help with how to add the descriptions for the rest?
To display your post thumbnail with its caption, simply paste the following code inside the loop:
<?php the_post_thumbnail();
echo get_post(get_post_thumbnail_id())->post_excerpt; ?>
You can also display entire image description by adding this code inside the post loop:
<?php the_post_thumbnail();
echo get_post(get_post_thumbnail_id())->post_content; ?>
the above codes for single images if you use multiple images use this code below
<?php
$the_post_images = get_children( array(
'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type'=> 'image'
) );
foreach ($the_post_images as $the_post_image) {
// SHOW FEATURED IMAGE TITLES
echo get_the_title( $the_post_image->ID );
//SHOW IMAGE DESCRIPTION OR CAPTIONS
echo apply_filters( 'get_the_excerpt', $the_post_image->post_excerpt );
}
?>
To get image, its caption in multiple post thumbnails,
`
echo $secondimgPath = MultiPostThumbnails::get_post_thumbnail_url( get_post_type(), 'second-featured-image', NULL);
echo $secondimgIdAttachment = abcd_get_attachment_id_by_url($secondimgPath);
$size = array( 854,395, 'bfi_thumb' => true, 'quality' => 100);
echo $secondLargeImage[0] = wp_get_attachment_image( $secondimgIdAttachment,$size );
echo get_post( $secondimgIdAttachment )->post_excerpt;
endif; ?>`
In functions.php, use the following -
function abcd_get_attachment_id_by_url( $url ) {
// Split the $url into two parts with the wp-content directory as the separator
$parsed_url = explode( parse_url( WP_CONTENT_URL, PHP_URL_PATH ), $url );
// Get the host of the current site and the host of the $url, ignoring www
$this_host = str_ireplace( 'www.', '', parse_url( home_url(), PHP_URL_HOST ) );
$file_host = str_ireplace( 'www.', '', parse_url( $url, PHP_URL_HOST ) );
// Return nothing if there aren't any $url parts or if the current host and $url host do not match
if ( ! isset( $parsed_url[1] ) || empty( $parsed_url[1] ) || ( $this_host != $file_host ) ) {
return;
}
// Now we're going to quickly search the DB for any attachment GUID with a partial path match
// Example: /uploads/2013/05/test-image.jpg
global $wpdb;
$attachment = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM {$wpdb->prefix}posts WHERE guid RLIKE %s;", $parsed_url[1] ) );
// Returns null if no attachment is found
return $attachment[0];
}
I have a WordPress Admin page where you can add a "listing" within this Admin Page I have added many fields which transfer variables over to the listing page which is created/updated. Within this admin page I am trying to take the string after the last "&" in the url which is manually enter in the url before loading the page
see code below:
$url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$id = substr( $url, strrpos( $url, '&' )+1 );
NOW the code below here is called when the ABOVE admin page is submitted to update the "listing" what I need to do is somehow get the variable $id to pass through to this function and be used again within the submit code. Both of these functions are within functions.php so somehow it should be easy to do this!
This may not be "Wordpress Specific" but is a Wordpress Specific situation where I had this code working on a non-wordpress site. Please help!
$dirname = "../wp-content/themes/Explorable/".$id."/";
$images = glob($dirname."*.jpg");
// Open a known directory, and proceed to read its contents
foreach($images as $image) {
$imageNameLong = substr($image, -14);
$imageName = substr($imageNameLong,0 , -4);
if ( isset( $_POST[$imageName.'links'] ) )
update_post_meta( $post_id, '_'.$imageName.'links', sanitize_text_field( $_POST[$imageName.'links'] ) );
else
delete_post_meta( $post_id, '_'.$imageName.'links' );
if ( isset( $_POST[$imageName.'heading'] ) )
update_post_meta( $post_id, '_'.$imageName.'heading', sanitize_text_field( $_POST[$imageName.'heading'] ) );
else
delete_post_meta( $post_id, '_'.$imageName.'heading' );
};