Hinzufügen des Dropdown-Menüs „Sortieren nach“ auf der benutzerdefinierten Seite mithilfe des Woocommerce-Kurzcodes

Lesezeit: 4 Minuten

Hinzufugen des Dropdown Menus „Sortieren nach auf der benutzerdefinierten Seite mithilfe
Loren

Ich habe eine benutzerdefinierte Seite mit Woocommerce-Kurzcode für Produktkategorien erstellt. Im Moment ist es ziemlich spärlich, da ich gerade erst mit der neuen Seite begonnen habe.

Ich brauche nur das Standard-Dropdown-Element “Sortieren nach”, aber ich habe keine Ahnung, wie es geht.

Ich habe hier einen Code gefunden >>Woocommerce, Dropdown-Menü für Shortcode-basierte Produktlisten sortieren

und es hat auf jeden Fall das Dropdown-Menü platziert, das ich auf der Website benötige (obwohl ich es links ausgerichtet haben möchte).

Das einzige Problem ist jetzt, dass die Produkte mit riesigen Bildern und alle in einer einzigen vertikalen Spalte angezeigt werden.

Ich bin kein PHP-Programmierer und frage mich, ob ich wichtigen Code in der von mir geänderten PHP-Datei gelöscht habe. (Gott sei Dank habe ich eine Kopie des Originals genommen!).

Kann jemand helfen? Gibt es eine bessere Möglichkeit, das Dropdown-Menü „Sortieren nach“ zu meinen benutzerdefinierten Seiten hinzuzufügen?

Dies ist eine der Seiten, die ich erstellt habe >> http://www.sdmtest1.co.uk/notebooks-journals/

Hier ist der Code, den ich hinzugefügt habe.

/**
 * List products in a category shortcode
 *
 * @param array $atts
 * @return string
 */
public static function product_category( $atts ) {
    $atts = shortcode_atts( array(
        'per_page' => '12',
        'columns'  => '4',
        'orderby'  => 'title',
        'order'    => 'desc',
        'category' => '',  // Slugs
        'operator' => 'IN' // Possible values are 'IN', 'NOT IN', 'AND'.
    ), $atts );

    if ( ! $atts['category'] ) {
        return '';
    }

    // Default ordering args
    $ordering_args = WC()->query->get_catalog_ordering_args( $atts['orderby'],    
$atts['order'] );
$orderby = 'title';
$order="asc";
if ( isset( $_GET['orderby'] ) ) {
    $getorderby = $_GET['orderby'];
}
if ($getorderby == 'popularity') {
    $orderby = 'meta_value_num';
    $order="desc";
    $meta_key = 'total_sales';
} elseif ($getorderby == 'rating') {

    $fields .= ", AVG( $wpdb->commentmeta.meta_value ) as average_rating ";

    $where .= " AND ( $wpdb->commentmeta.meta_key = 'rating' OR $wpdb->commentmeta.meta_key IS null ) ";

    $join .= "
        LEFT OUTER JOIN $wpdb->comments ON($wpdb->posts.ID = $wpdb->comments.comment_post_ID)
        LEFT JOIN $wpdb->commentmeta ON($wpdb->comments.comment_ID = $wpdb->commentmeta.comment_id)
    ";

    $orderby = "average_rating DESC, $wpdb->posts.post_date DESC";

    $groupby = "$wpdb->posts.ID";   

} elseif ($getorderby == 'date') {
    $orderby = 'date';
    $order="desc";
} elseif ($getorderby == 'price') {
    $orderby = 'meta_value_num';
    $order="asc";
    $meta_key = '_price';
} elseif ($getorderby == 'price-desc') {
    $orderby = 'meta_value_num';
    $order="desc";
    $meta_key = '_price';
}
$args = array(
    'post_type'             => 'product',
    'post_status'           => 'publish',
    'ignore_sticky_posts'   => 1,
    'orderby'               => $orderby, // $ordering_args['orderby'],
    'order'                 => $order, // $ordering_args['order'],
    'meta_key'              => $meta_key,
    'fields'                => $fields,
    'where'                 => $where,
    'join'                  => $join,
    'groupby'               => $groupby,
    'posts_per_page'        => $per_page,
    'meta_query'            => array(
        array(
            'key'           => '_visibility',
            'value'         => array('catalog', 'visible'),
            'compare'       => 'IN'
        )
    ),
    'tax_query'             => array(
        array(
            'taxonomy'      => 'product_cat',
            'terms'         => array( esc_attr( $category ) ),
            'field'         => 'slug',
            'operator'      => $operator
        )
    )
);

if ( isset( $ordering_args['meta_key'] ) ) {
    $args['meta_key'] = $ordering_args['meta_key'];
}

ob_start();

$products = new WP_Query( apply_filters( 'woocommerce_shortcode_products_query', $args, $atts ) );

$woocommerce_loop['columns'] = $columns;

if ( $products->have_posts() ) : ?>

<div style="width:100%;">
    <div style="float:right">
        <form class="woocommerce-ordering" method="get">
            <select name="orderby" class="orderby">
                <?php
                    $catalog_orderby = apply_filters( 'woocommerce_catalog_orderby', array(
                        'menu_order' => __( 'Default sorting', 'woocommerce' ),
                        'popularity' => __( 'Sort by popularity', 'woocommerce' ),
                        'rating'     => __( 'Sort by average rating', 'woocommerce' ),
                        'date'       => __( 'Sort by newness', 'woocommerce' ),
                        'price'      => __( 'Sort by price: low to high', 'woocommerce' ),
                        'price-desc' => __( 'Sort by price: high to low', 'woocommerce' )
                    ) );

                    if ( get_option( 'woocommerce_enable_review_rating' ) === 'no' )
                        unset( $catalog_orderby['rating'] );

                    foreach ( $catalog_orderby as $id => $name )
                        echo '<option value="' . esc_attr( $id ) . '" ' . selected( $getorderby, $id, false ) . '>' . esc_attr( $name ) . '</option>';
                ?>
            </select>
            <?php
                // Keep query string vars intact
                foreach ( $_GET as $key => $val ) {
                    if ( 'orderby' === $key || 'submit' === $key )
                        continue;

                    if ( is_array( $val ) ) {
                        foreach( $val as $innerVal ) {
                            echo '<input type="hidden" name="' . esc_attr( $key ) . '[]" value="' . esc_attr( $innerVal ) . '" />';
                        }

                    } else {
                        echo '<input type="hidden" name="' . esc_attr( $key ) . '" value="' . esc_attr( $val ) . '" />';
                    }
                }
            ?>
        </form>
    </div>
</div>
<div style="clear:both;"></div>

    <?php woocommerce_product_loop_start(); ?>

        <?php while ( $products->have_posts() ) : $products->the_post(); ?>

            <?php wc_get_template_part( 'content', 'product' ); ?>

        <?php endwhile; // end of the loop. ?>

    <?php woocommerce_product_loop_end(); ?>

<?php endif;

woocommerce_reset_loop();
wp_reset_postdata();

return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';

}

Ich habe in Dreamweaver bearbeitet und es hat einen Syntaxfehler gemeldet. Ich war mir nicht sicher, wo der Code, den ich eingefügt habe, beginnen und enden sollte, und ich habe dieses Bit dabei irgendwie verloren.

        // Remove ordering query arguments
    WC()->query->remove_ordering_args();

    return $return;
}

Danke Loren

  • Zeigen Sie uns etwas Code, wir können Ihnen sagen, ob etwas in Ihrem Code nicht stimmt, wenn wir es nicht sehen

    – ThemesCreator

    12. Oktober 2015 um 19:47 Uhr

1004310cookie-checkHinzufügen des Dropdown-Menüs „Sortieren nach“ auf der benutzerdefinierten Seite mithilfe des Woocommerce-Kurzcodes

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy