Přehled odpovědí
-
AutorPříspěvky
-
Formulář i odesílání jsou kodovane v utf-8.
Dobrý den.
Zkoušel jste nastavit zvlastni css pro:- mibilni zarizeni (generuje-li se spesl class pro… vetsinou body)
- mensi sirky obrazovky
pro mensi sirky obrazovky lze nastavit style:
@media screen and (max-width: 650px) { .classaImgNeboJineTargetovani { width: 100%; height: auto; } }
Jestli nevite jak na to nebo to nepomaha, tak nebude-li vam vadit uvest odkaz stranky napiste do prispevku nebo kdyztak poslete na mail ott.michal@volny.cz a kouknu jak je to ostylovane a zkusim najit neco co by mohlo pomoct.
K naruseni responzivity pravdepodobne doslo pevnym nastavenim nejakeho rozmeru pro desktop zobrazeni a nasledne na mobilu se tento rozmer zachova, ikdyz je sirka stranky mnohem mensi.
Lze to vyresit pomoci css a nastavenim limitnich velikosti.
Priklad:<style> .neco { width:800px; } .neco2 { width:850px; } @media only screen and (max-width:900px) { .neco { width:400px; } .neco2 { width:450px; } } @media only screen and (max-width:480px) { .neco { width:100px; } .neco2 { width:150px; } } </style>
prvek s class neco bude mit do sirky 480px sirku 100px, od 480px do 900px sirku 400px a pro vetsi 800px.
To same lze se zapisem:<style> @media only screen and (min-width:480px) { .neco { ... } .neco2 { ... } } </style>
Nebo lze vyresit zadavanim v procentech.
Dobry den.
Ja bych to asi resil tak ze bych udelal page sablonu v ktere by se nejnovejsi prispevek zobrazoval, jskem osetril rozmery, vytvoril ve wp stranku vyuzivajici danou sablonu a daval moznost vlozit stranku jako iframe.
Pripadne bez sablony jen udelat stranku s prispevkem na blank page a jskem setrit rozmer a pozici s ohledem na konecny iframe.Ano, spravne.:-)
No nic se mi najit nepodarilo… nebo jsem to spatne vyhledaval… ja a moje anglictina… obcas mam problem formulovat spravny dotaz…
Mozna je to v nejakym placenym pluginu… ty skoro vzdy preskakuju…Woocommerce bere cenu z db… To znamena ze se musej definovat vsechny kombinace ktere chcete mit jinak cenove nez nejaky default ktery nastavite…
Takze pri pouzivani tohohle kodu, napisete ke kazde variante primo jeji cenu a jejim nakombinovanim s dalsim vyberem vlastnosti se pricita ruzne velka cena.
uvedu priklad.
budu prodavat tricka.Latka tricka:
–Bavlna
–Bambus
–PVC (no co je to jen priklad :-D )Velikost potisku:
dejme tomu treba 20 variant na vybrani.Tak a ted misto toho abych nastavoval cenu pro vsechny mozne kombinace (3*20), udelam jen to ze do variant vlozim kazdou variantu 1x (3+20) s tim ze druhou moznost necham jako [vsechny].
A kazde nastavim vlastni cenu.A zobrazena cena se mi zobrazi jako soucet cen vybrane Latky + Velikosti potisku.
Javascript jeste pridam.:-D A tohle je jen kod pro kosik/objednavku
Tak vyreseno.:-D
Tohle secte ceny variant a zobrazi v kosiku.
Pro stranku produktu je zapotrebi mensi js ale ten si urcite kazdej zvladne udelat.:-)/* Funkce provadejici sumaci zvolenych variant */ function my_suma_cart_price( $price, $cart_item){ if( !empty($cart_item['variation_id']) ){ $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key ); $product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key ); $array = get_product( $product_id, true ); $array = $array->get_available_variations(); $variations = $cart_item['variation'] ; $price=0; foreach( $array as $key => $val ){ foreach( $variations as $var_key => $var_val ){ if( $val['attributes'][$var_key]==$var_val ){ $price+=$val['display_price']; } } } } return $price; } /* Zobrazeni Sumace ceny v kosiku */ add_action( 'woocommerce_before_calculate_totals', 'add_custom_price' ); function add_custom_price( $cart_object ) { // Prochazeni produktu v kosiku foreach ( $cart_object->cart_contents as $key => $value ) { // Pokud ma varianty zavola funkci sumace a vrati hodnotz if ( !empty($value['variation_id']) ) { $price=$value['data']->price; $value['data']->price = my_suma_cart_price( $price, $value); } } }
Kouam že jsem to napsal trochu nesrozumitelně… Produkt se dvema selectama jako varianty. Kazda varianta vlastni cenu. Jenze tahle sumacni cena neni v db… A do kosiku se propise variation_id jen z jednoho selectu… ne z obou…
takze jen cena z odpovidajici produktu s variation_id… A ja v kosiku potrebuju zobrazit sumacni cenu.Ok… celé…:-D Na stránce produktu sčítam ceny variant. Protože to wc neumožnuje. Nahradil jsem všechny příslušné hodnoty ceny ve stránce na novou hodnotu.
Ale následně když to přidam do košíku, propíše se tam cena jen jedné varianty…
Trochu se v tom teď hrabu a zdá se mi že by mohlo stačit nahradit pár filtrů…echo apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key );
a možná i:
echo apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key );
Jak korektně nahradim tyhle filtry?
Potreboval jsem do woocommerce pridat na pravou stranu dva inputy pro obrazky ktere se budou zobrazovat spolecne s hlavnim, jako takova mozaika na strankach s producty.
Jinak vyreseno.:-D
Kdyztak tady je muj kod:
Je funkcni jen tam mozna bude neco navic…if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } function custom_meta_box_markup($object) { wp_nonce_field(basename(__FILE__), "meta-box-nonce"); global $post, $product; $post_id=$post->ID; ?> <div> <div style="padding: 10px 0;"> <label>Malý obrázek do categorie</label> <div> <img id="image-prew" src="<?php echo get_post_meta($post_id, "_small_obr", true); ?>" width="100px" name="" height="auto"> </div> <input type="hidden" id='image-url' name='small_obr' value='<?php echo get_post_meta($post_id, "_small_obr", true); ?>'> <a href="#" id="upload-button" class="button">Add my media</a> </div> <script> jQuery(document).ready(function($){ $('#image-url1').attr('name', $('#typ_obr').val() ); $('#typ_obr').on('change', function() { $('#image-url1').attr('name', $(this).val() ); }); var mediaUploader; $('#upload-button').click(function(e) { e.preventDefault(); // If the uploader object has already been created, reopen the dialog if (mediaUploader) { mediaUploader.open(); return; } // Extend the wp.media object mediaUploader = wp.media.frames.file_frame = wp.media({ title: 'Choose Image', button: { text: 'Choose Image' }, multiple: false }); // When a file is selected, grab the URL and set it as the text field's value mediaUploader.on('select', function() { attachment = mediaUploader.state().get('selection').first().toJSON(); $('#image-url').val(attachment.url); $('#image-prew').attr('src',attachment.url); }); // Open the uploader dialog mediaUploader.open(); }); }); </script> </div> <?php } function add_custom_meta_box() { add_meta_box("demo-meta-box", "Obrázky v categorii", "custom_meta_box_markup", "post", "side", "high", null); add_meta_box( 'demo-meta-box', __( 'Obrázky v categorii', 'woocommerce' ), 'custom_meta_box_markup', 'product', 'side', 'low' ); } function remove_custom_field_meta_box() { remove_meta_box("postcustom", "post", "normal"); } add_action("do_meta_boxes", "remove_custom_field_meta_box"); add_action("add_meta_boxes", "add_custom_meta_box"); function save_custom_meta_box($post_id, $post, $update) { if (!isset($_POST["meta-box-nonce"]) || !wp_verify_nonce($_POST["meta-box-nonce"], basename(__FILE__))) return $post_id; if(!current_user_can("edit_post", $post_id)) return $post_id; if(defined("DOING_AUTOSAVE") && DOING_AUTOSAVE) return $post_id; $slug = "product"; if($slug != $post->post_type) return $post_id; $meta_box_text_value = ""; $meta_box_checkbox_value = ""; if(isset($_POST["small_obr"])) { $meta_box_text_value = $_POST["small_obr"]; update_post_meta($post_id, "_small_obr", $meta_box_text_value); } } add_action("save_post", "save_custom_meta_box", 10, 3);
Obrazek lze nasledne volat jako:
$small = ''; if( get_post_meta($post_id, "_small_obr", true) ){ $small = '<div class="et_shop_image pr_small height50"><img title="small" src="'.get_post_meta($post_id, "_small_obr", true).'" alt="small"><span class="et_overlay"></span></div>'; } echo $small;
jo a tady je kdyztak kod na inputy kdyby to nekdo chtel testnout…
// Add Variation Settings add_action( 'woocommerce_product_after_variable_attributes', 'variation_settings_fields', 10, 3 ); // Save Variation Settings add_action( 'woocommerce_save_product_variation', 'save_variation_settings_fields', 10, 1 ); /** * Create new fields for variations * */ function variation_settings_fields( $loop, $variation_data, $variation ) { // Number Field woocommerce_wp_text_input( array( 'id' => '_regular_price_eur[' . $variation->ID . ']', 'label' => __( 'Regular price in EUR', 'woocommerce' ), 'desc_tip' => 'true', 'class' => 'short', 'description' => __( 'Enter regular price .', 'woocommerce' ), 'value' => get_post_meta( $variation->ID, '_regular_price_eur', true ), 'custom_attributes' => array( 'step' => 'any', 'min' => '0' ) ) ); // Number Field woocommerce_wp_text_input( array( 'id' => '_sales_price_eur[' . $variation->ID . ']', 'label' => __( 'Sales price in EUR', 'woocommerce' ), 'desc_tip' => 'true', 'class' => 'short', 'description' => __( 'Enter the custom number here.', 'woocommerce' ), 'value' => get_post_meta( $variation->ID, '_sales_price_eur', true ), 'custom_attributes' => array( 'step' => 'any', 'min' => '0' ) ) ); } /** * Save new fields for variations * */ function save_variation_settings_fields( $post_id ) { // Number Field $number_field = $_POST['_regular_price_eur'][ $post_id ]; if( ! empty( $number_field ) ) { update_post_meta( $post_id, '_regular_price_eur', esc_attr( $number_field ) ); } // Number Field $number_field = $_POST['_sales_price_eur'][ $post_id ]; if( ! empty( $number_field ) ) { update_post_meta( $post_id, '_sales_price_eur', esc_attr( $number_field ) ); } } /** * Create new fields for single * */ add_action( 'woocommerce_product_options_pricing', 'single_settings_fields' ); // Save Variation Settings add_action( 'woocommerce_process_product_meta_simple', 'save_single_settings_fields', 10, 1 ); function single_settings_fields( $product ) { // Number Field woocommerce_wp_text_input( array( 'id' => '_regular_price_eur', 'class' => 'short', 'label' => __( 'Regular price in EUR', 'woocommerce' ), 'desc_tip' => 'true', 'description' => __( 'Enter regular price .', 'woocommerce' ), 'value' => get_post_meta( $_REQUEST['post'], '_regular_price_eur', true ), 'custom_attributes' => array( 'step' => 'any', 'min' => '0' ) ) ); // Number Field woocommerce_wp_text_input( array( 'id' => '_sales_price_eur', 'class' => 'short', 'label' => __( 'Sales price in EUR', 'woocommerce' ), 'desc_tip' => 'true', 'description' => __( 'Enter the custom number here.', 'woocommerce' ), 'value' => get_post_meta( $_REQUEST['post'], '_sales_price_eur', true ), 'custom_attributes' => array( 'step' => 'any', 'min' => '0' ) ) ); } /** * Save new fields for single * */ function save_single_settings_fields( $product_id ) { // Number Field $number_field = $_POST['_regular_price_eur']; if( ! empty( $number_field ) ) { update_post_meta( $product_id, '_regular_price_eur', esc_attr( $number_field ) ); } // Number Field $number_field = $_POST['_sales_price_eur']; if( ! empty( $number_field ) ) { update_post_meta( $product_id, '_sales_price_eur', esc_attr( $number_field ) ); } }
jestli je to na strance produktu, tak by melo fungovat:
<?php $id_orez = substr($product->id, 0, 1); ?>
$product->id je volani id z globalni promenne.
a substr(… , 0, 1) vypise cast retezce od 0teho znaku po 1.A kde to potrebujete provest? na strance detailu produktu?
Dobrý den.
Jen aby jste si kdyžtak nemyslel že to nikdo nečetl…
Osobně jedu přez css a měnim počet obrázků v jedné řádce…@media (max-width: 600px) { ... }
A co mysíte tím “Bohužel nefunguje to na 100%.” ?
Mohl by jste uvést nějaký konkrétní příklad?Tak jsem si napsal vlastni js….
volam ho pomoci js pote, co zmenim hodnoty v orig selectech…function vypis_dat(){ var variation = $('.variations_form').data('product_variations'); $('.variations_form').find('select').each(function(){ idecko = 'attribute_'+$(this).attr('id'); for(i=0;i<variation.length;i++){ if(variation[i]['attributes'][idecko]==$(this).val()){ if(variation[i]['variation_is_visible']){ if(variation[i]['price_html']){ $('.single_variation').children('.price').html(variation[i]['price_html']);/*update ceny je-li definovana*/ } if(variation[i]['availability_html']){ $('.single_variation').html(variation[i]['availability_html']);/*update poctu kusu na sklade je-li definovana*/ } if(variation[i]['variation_id']){ $('.variation_id').attr('value', variation[i]['variation_id'] );/*update hidden inputu kuli kosiku*/ } } } } $('.single_variation_wrap').css('display', 'block'); }); }
Lze vlozit napriklad uzasnym starym tagem
<iframe src='url'></iframe>
A jen si to ostylovat.
Jen jde o to aby na to bylo mysleno pri tvorbe te galerie na jine strance a trochu dle toho pripadne prizpusobit css… mozna nejaky ten javascriptik.Proste jsem to potreboval.:-D
Nj… za to se omlouvam… je to vysec z kodu a tohle mi nejak uteklo…:-D ano…
kdyztak postuji muj php kod…/* Přímé vyhledání dle názvu v proměnné $media */ $args = array( 'post_type' => 'attachment', 'orderby' => 'menu_order', 'order' => 'ASC' , 'name' => $media ); $attachments = get_posts($args); /* END přímé vyhledání dle názvu v proměnné $media */ /* vyhledávání dalších verzí se stejným názvem a WP proto přejmenovanými na nazev-cislo !!!nenačte li se první, projde name-0 až name-10!!! */ $i=0; while((!$attachments)&($i<10)){ $med = $media.'-'.$i; $args = array( 'post_type' => 'attachment', 'orderby' => 'menu_order', 'order' => 'ASC' , 'name' => $med ); $attachments = get_posts($args); $i++; } if ($attachments) { foreach ( $attachments as $attachment ) { $image_title = $attachment->post_title; $image_guid = $attachment->guid; $image_type = $attachment->post_mime_type; /* END vyhledávání dalších verzí se stejným názvem, nenačte li se první, a WP proto přejmenovanými na nazev-cislo */
:-D Cha!
Děkuji. :-D
Já jsem nejdřív psal protitle
pak jsem to přepsal naname
protože jsem si říkal že by mohli dělat nepořádek mezery vtitle
aname
bude vhodnejší.:-)
Protože si to posílam jako$_REQUEST
proměnnou.
Každopádně již sort by name funguje.
Děkuji. :-)Bohužel nejsem, ale děkuji.:-D
Hlavně že to funguje.:-) -
AutorPříspěvky