Forum Replies Created

Viewing 15 replies - 1 through 15 (of 19 total)
  • Thread Starter durrmann

    (@durrmann)

    Hey,

    thank you!
    You pointed me in the right direction. The following did the trick:

    .hfg-item-v-middle {
        align-self: flex-start !important;
    }

    The unset option left one of the widgets unaligned.

    Thank you very much!

    Thread Starter durrmann

    (@durrmann)

    Thank you!
    I wonder how i could have overseen this!

    Thread Starter durrmann

    (@durrmann)

    Thank you for your support, but the site is not yet online. Can you give an example of the CSS code? E.g. for Footer Top/Main/Bottom?

    Thread Starter durrmann

    (@durrmann)

    Thank you very much! that did the trick!

    Thread Starter durrmann

    (@durrmann)

    Hello @bvytis

    i updated the link to the screenshot:
    https://s12.directupload.net/images/201022/ryzo3etl.png

    Greetings!

    Thread Starter durrmann

    (@durrmann)

    Hello @bvytis

    thank you for working on this issue!
    I have an example for you here. The products differ in their title length and one of them has a rating. this leads to this “stairs” effect:

    https://s12.directupload.net/images/201022/z6i4rv7l.png

    Thank you for your effort!

    • This reply was modified 3 years, 10 months ago by durrmann.
    Thread Starter durrmann

    (@durrmann)

    Hello,

    thank you for the clarification.
    I believe it would be a nice idea to display this sticker also on specific variants, taking into account the stock amount of the specific variant. I believe this would be a nice feature, useful for many people 🙂

    Please consider adding it to make your plugin even more attractive!

    Have a good day!

    Thread Starter durrmann

    (@durrmann)

    i tried it and the behaviour is unchanged. (Also the plugin was not update since i asked this question)
    The latest plugin version available to wordpress seems to be 1.1.5 (https://wordpress.org/plugins/woo-stickers-by-webline/)

    The sold sticker does only display on simple products, if their stock quantity is 0, but not on a sold out variation of a variable product.

    If i have a green, a yellow and a red tshirt as product variations, and the red tshirt is sold out, the “Sold”-Sticker should only show over the red tshirt variation.

    • This reply was modified 4 years ago by durrmann.
    Thread Starter durrmann

    (@durrmann)

    Great, i will try it out as soon as possible!
    Thank you!

    Thread Starter durrmann

    (@durrmann)

    Hello @bvytis

    thank you for your reply. Attached you can find a screenshot:
    https://ibb.co/HGRGKjs

    You can see the magnified image of a rifle scope (After hovering over it). The same image is also visible in the background (in its original size).

    It would be great to see only the magnified version when hovering over the image and not the “two layers”.

    Hope it got a little bit clearer.
    Thank you!

    • This reply was modified 4 years ago by durrmann.
    Thread Starter durrmann

    (@durrmann)

    I solved this issue for me.
    I tried several approaches:

    • post_clauses filter: It was too difficult to get things working with custom SQL queries without inducing Side effects on other queries.
    • custom loop: This seemed to lead to the same issues of having to build custom queries in order to achieve my goal.
    • woocommerce_product_query and additional metadata: This is the solution i chose so far, described below

    I created a WordPress Plugin which first checks for woocommerce being active and then hooks the wp_load action in order to execute a function after wordpressa nd woocommerce is initialized (Hint: wc_get_products deliveres empty arrays in WP 5.4 when trying to execute without waiting for wp_load. waiting for woocommerce_loaded or woocommerce_init fails aswell):

    // exit if accessed directly
    if ( ! defined( 'ABSPATH' ) )
    	exit;
    
    /**
     * Check if WooCommerce is active
     **/
    if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
        // If you want use WooCommerce functions, do that after WooCommerce is loaded
        add_action( 'wp_loaded', 'my_function_with_wc_functions', $priority = 10, $accepted_args = 1 );
    }
    else{
    	exit;
    }
    
    function log_me($message) {
    	if ( WP_DEBUG == true ) {
    		if (is_array($message) || is_object($message)) {
    			ob_start();                    // start buffer capture
    			var_dump( $message );          // dump the values
    			$contents = ob_get_contents(); // put the buffer into a variable
    			ob_end_clean();                // end capture
    			error_log( $contents );        // log contents of the result of var_dump( $object )
    		} else {
    			error_log($message);
    		}
    	}
    }

    The next step was to integrate a function that initially loops over all products and adds their category id as post_metadata (_category). Only the lowest level categories are added, which do not have any more childs:

    function my_function_with_wc_functions() {
    
        set_product_category_meta();
    	remove_action( 'wp_loaded', 'my_function_with_wc_functions', $priority = 10, $accepted_args = 1 );
    
    }
    
    // Hook, to update meta data, as soon as a product gets changed somehow
    remove_action( 'woocommerce_update_product', 'update_product_meta_category', 10, 1 );
    add_action( 'woocommerce_update_product', 'update_product_meta_category', 10, 1 );
    function update_product_meta_category( $product_id ) {
    	
    	$term_filter = array(
    		'fields'		=> 'ids',
    		'orderby'		=> 'term_id',
    		'childless'		=> true,
    		'number'		=> 1,
    		'hide_empty'	=> true,
    	);
    			
    	$category_id = wp_get_post_terms($product_id, 'product_cat', $term_filter);
    	log_me("\$category_id: " . print_r($category_id[0], TRUE));
    	update_post_meta( $product_id, '_category', $category_id[0] );
    }
    
    // Set _category meta information for all products
    function set_product_category_meta() {
    	
    	$args = array(
    		'limit'		=> -1,
    		'return'	=> 'ids',
    	);
    	
    	$product_ids = wc_get_products( $args );
    	log_me("\$product_ids: " . print_r($product_ids, TRUE));
    
    	foreach ($product_ids as $product_id) {
    		update_product_meta_category($product_id);
    	}
    }

    Hint: The update of the metadata is happening every time someone visits the shop. Thats not smart, but i havent found a solution for that yet…
    Now the filter part:

    add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
    add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );
    function custom_woocommerce_catalog_orderby( $sortby ) {
    	return array(
            'category_and_price'	=> __("Kategorie", "woocommerce"),
            'natural_order'			=> __("Standardsortierung", "woocommerce"),
        ) + $sortby ;
    }
    #remove_filter( 'woocommerce_default_catalog_orderby', 'default_catalog_orderby_looptics' );
    add_filter( 'woocommerce_default_catalog_orderby', 'default_catalog_orderby_looptics' );
    function default_catalog_orderby_looptics( $default_orderby ) {
        return 'category_and_price';
    }
    
    # Die Product query wird ausgeführt, wenn Produkte abgerufen werden
    #remove_action( 'woocommerce_product_query', 'product_query_by_looptics' );
    
    add_action( 'woocommerce_product_query', 'product_query_by_looptics' );
    function product_query_by_looptics( $q ) {
    	
        if ( !isset( $_GET['orderby'] ) || (isset( $_GET['orderby'] ) && (wc_clean( $_GET['orderby'] ) == 'category_and_price')) && !is_admin() ) {
    		$meta_query = array(
    			'relation' => 'AND',
    			'category_clause' => array(
    				'key'		=> '_category',
    				'type'		=> 'UNSIGNED',
    				'compare'	=> 'EXISTS',
    			),
    			'price_clause' => array(
    				'key'		=> '_price',
    				'type'		=> 'UNSIGNED',
    				'compare'	=> 'EXISTS',
    			), 
    		);
    		$meta_orderby = array( 
    			'category_clause' => 'ASC',
    			'price_clause' => 'ASC',
    		);
    		
            $q->set( 'meta_query', $meta_query );
            $q->set( 'orderby', $meta_orderby );
        }
    }

    Like this i can order my products by category and price at the same time.
    Please advise me of better solutions, if you know them!

    Greetings!

    Thread Starter durrmann

    (@durrmann)

    Hey @riaanknoetze

    Thank you for your resources. I checked them and already edited the template. I am convinced i can reach my goal in the way you showed me, which is good!
    However i am not yet completely happy.
    Using the approach with the custom loop for the product type, i see the following disadvantages:

    • There is no custom sorting option in the dropdown field of the shop page
    • The sorting logic has to be implemented in PHP, instead of using the (already existing) database’s option to sort by using two columns
    • Implementing the custom sorting logic in the loop might break / conflict with the sorting options from the dropdown menu

    Is there no way achieving my desired sorting option using custom filters / actions?
    The documentation i know so far does not allow to filter by category and price at the same time, but maybe i have overseen something?

    Greetings!

    Thread Starter durrmann

    (@durrmann)

    @cybr

    Ah, thanks! That was it! You’re the man!

    Thread Starter durrmann

    (@durrmann)

    @noisysocks Thank you very much for your help!
    Thats exactly what i needed!

    P.S.: I like your shirt!

    Hello Guido,

    i understand your concerns regarding reCAPTCHA and probably the dependency of google. However, CAPTCHA solutions are extremely difficult to design and a lot of projects already died due to their weaknesses and their inefficiency. The solution you suggested is barely more secure than the one you are using right now, as an attacker might circumvent it easily.
    Some hints are given on this page: https://www.gravityforms.com/rip-captcha/
    Maybe a honeypot solution is OK for now, even though it is not very secure either, but at least it doesnt disturb the users.
    Unfortunately, Googles noCAPTCHA is the most advanced CAPTCHA until now. MAybe also an integration of Akismet Spam Plugin could work. However, i havent checked that in detail

    Greetings!

Viewing 15 replies - 1 through 15 (of 19 total)