it-swarm.com.de

So sortieren Sie eine Tabelle mit benutzten Beiträgen nach Spalten mit benutzten Feldern

Ich habe einen benutzerdefinierten Beitragstyp namens "laptop" mit benutzerdefinierten Feldern wie "CPU", "OS", "RAM" usw., die mit dem Plugin "Advanced Custom Fields" erstellt wurden.

Ich zeige eine Tabelle mit Laptops an, wobei der Tabellenkopf eine Reihe benutzerdefinierter Felder ist und jede folgende Reihe einen Laptopnamen und benutzerdefinierte Feldwerte in jeder der entsprechenden Spaltenzellen enthält.

Ich möchte die Tabelle sortieren können, indem ich auf die Zelle TH der Tabelle klicke, die den Namen des benutzerdefinierten Felds enthält.

Ich wurde vom ACF-Support auf Meta-Abfrageklauseln hingewiesen, aber ich bin mit diesen nicht einverstanden.

Ich würde mich sehr über eine Hilfe bei der Generierung von URLs freuen, die den benutzerdefinierten Feldnamen in jedem TH -Element umschließen.

3
Steve

Müssen Sie das Backend wirklich abfragen, wenn ein Benutzer auf eine Spaltenüberschrift klickt, um den Kommentar von @ rock3t zu verfolgen?

Haben Sie sich mit der Verwendung von jQuery tablesorter befasst? Es ermöglicht dem Endbenutzer, eine HTML-Tabelle durch DOM-Manipulationen zu sortieren.

Ich habe es noch nie in einem WP Projekt verwendet, aber ich habe es ausgiebig in anderen Projekten verwendet, die ich erstellt habe, und es funktioniert großartig. Es ist sehr konfigurierbar, daher bin ich sicher, dass es Ihre Anforderungen erfüllen wird.

tablesorter ist not eines der in WP Core enthaltenen jQuery-Plugins. Sie müssen es also herunterladen (über den obigen Link), irgendwo in Ihr Plugin/Theme einfügen und in die Warteschlange stellen. Stellen Sie dann eine einfache JS-Datei in die Warteschlange, die ungefähr so ​​aussehen würde:

(function ($) {
    $(document).ready (function () {         
        $('#id_of_your_table').tablesorter ({widgets: ['zebra']}) ;     
        }) ;
})(jQuery) ;

Weitere Informationen zur Verwendung von Tablesort finden Sie in deren docs , einschließlich verschiedener anderer Parameter für die Methode tablesorter().

Einfach mit dieser Referenz: https://codex.wordpress.org/Class_Reference/WP_Query

orderby sollte meta_value sein

'meta_value' - Beachten Sie, dass in der Abfrage auch ein 'meta_key = keyname' vorhanden sein muss.

Ihr Schlüsselname sollte einer der folgenden sein: CPU, Betriebssystem, RAM ...

Sie können auch die Klasse WP_Meta_Query berücksichtigen. https://codex.wordpress.org/Class_Reference/WP_Meta_Query


Das Update


Ich habe dieses Ergebnis bekommen

    Array
(
    [0] => WP_Post Object
        (
            [ID] => 3233
            [post_author] => 1
            [post_date] => 2016-11-19 12:51:43
            [post_date_gmt] => 2016-11-19 12:51:43
            [post_content] => abc
            [post_title] => Mac Air Pro 9G
            [post_excerpt] => 
            [post_status] => publish
            [comment_status] => closed
            [ping_status] => closed
            [post_password] => 
            [post_name] => mac-air-pro-3
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2016-11-19 12:52:19
            [post_modified_gmt] => 2016-11-19 12:52:19
            [post_content_filtered] => 
            [post_parent] => 0
            [guid] => http://steve.com/laptop/mac-air-pro-1-copy/
            [menu_order] => 0
            [post_type] => laptop
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
        )

    [1] => WP_Post Object
        (
            [ID] => 3232
            [post_author] => 1
            [post_date] => 2016-11-19 12:46:50
            [post_date_gmt] => 2016-11-19 12:46:50
            [post_content] => abc
            [post_title] => Mac Air Pro 8G
            [post_excerpt] => 
            [post_status] => publish
            [comment_status] => closed
            [ping_status] => closed
            [post_password] => 
            [post_name] => mac-air-pro-2
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2016-11-19 12:52:47
            [post_modified_gmt] => 2016-11-19 12:52:47
            [post_content_filtered] => 
            [post_parent] => 0
            [guid] => http://steve.com/laptop/mac-air-pro-1-copy/
            [menu_order] => 0
            [post_type] => laptop
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
        )

    [2] => WP_Post Object
        (
            [ID] => 3231
            [post_author] => 1
            [post_date] => 2016-11-19 12:12:38
            [post_date_gmt] => 2016-11-19 12:12:38
            [post_content] => abc
            [post_title] => Mac Air Pro 4G
            [post_excerpt] => 
            [post_status] => publish
            [comment_status] => closed
            [ping_status] => closed
            [post_password] => 
            [post_name] => mac-air-pro-1
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2016-11-19 12:52:57
            [post_modified_gmt] => 2016-11-19 12:52:57
            [post_content_filtered] => 
            [post_parent] => 0
            [guid] => http://steve.com/?post_type=laptop&p=3231
            [menu_order] => 0
            [post_type] => laptop
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
        )

)

Hier ist der Inhalt der single-laptop.php-Datei:

<?php
/**
 * The template for displaying all single posts.
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
 *
 * @package microformats
 */

get_header(); 


// WP_Query arguments
$args = array (
    'post_type'              => array( 'laptop' ),
    'post_status'            => array( 'published' ),
     //'s'                      => 'atom', // only if you need that
    'nopaging'               => true,
    'posts_per_page'         => '-1',
    'ignore_sticky_posts'    => true,
    // order
    'orderby'                => 'meta_value', 
    'meta_key'               => 'ram',
    'order'                  =>'DESC',
    /* you will need this only if
    'meta_query'             => array(
        array(
            'key'       => 'ram', // or os, or cpu
            'value'     => '4', // meaning 4G of ram
            'compare'   => '>',  // meaning only biggar
            'type'      => 'NUMERIC',
        ),
    ),
    */
);


// The Query
$query = new WP_Query( $args );
print_r($query->posts);


?>

    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">

        <?php while ( have_posts() ) : the_post(); ?>

            <?php get_template_part( 'template-parts/content', 'single' ); ?>

            <?php
                // If comments are open or we have at least one comment, load up the comment template.
                if ( comments_open() || get_comments_number() ) :
                    comments_template();
                endif;
            ?>


            <hr class="fat" />              

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

        </main><!-- #main -->
    </div><!-- #primary -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>
0
prosti