abonnement Unibet Coolblue Bitvavo
pi_215548202
Goedemorgen!

Even een korte vraag: is er een manier om de zogenaamde archive pagina op een wordpress website wat overzichtelijker te maken?

Stel: ik heb 185 artikelen/posts. Op de archive pagina komen ze nu 1 voor 1 (chronologisch) in beeld. Is er ook een manier om bijvoorbeeld een alfabetische index te maken zodat je snel door de artikelen heen kunt scrollen? Nu staan er 10 artikelen op de homepage en diezelfde 10 artikelen zie ik ook als eerste op de archive pagina..
pi_215548754
Zou het richting plugins zoeken. Geen ervaring met deze, maar misschien is dit iets https://wordpress.org/plugins/archive-control/
pi_215550106
quote:
0s.gif Op maandag 11 november 2024 11:57 schreef Sapstengel het volgende:
Zou het richting plugins zoeken. Geen ervaring met deze, maar misschien is dit iets https://wordpress.org/plugins/archive-control/
Thx! Had al even gekeken, maar deze is bijvoorbeeld al lang niet geupdate. Zal er vanavond nog eens wat beter naar kijken.
pi_215557552
Even voor de technici onder ons: ik heb inmiddels een stukje code geschreven via ChatGPT (en dat werkt verrassend goed). Dat heeft me zover gebracht dat ik nu een tabel heb A t/m Z en 0 t/m 9. Als ik op 'A' klik zou ik alle posts moeten zien die met de A beginnen. En dat laatste is nou precies wat er niet gebeurt.. in plaats van alle posts met de A zie ik simpelweg alle posts (dus ook met B t/m Z). Ondanks meerdere malen vragen aan ChatGPT lukt het hem helaas niet om dit te fixen :P

Wellicht is er hier iemand die een snelle blik op de code kan werpen?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
function generate_alphabetical_index() {
    
// Define the index: alphabet A-Z and the numeric 0-9
    
$index array_merge(range('A''Z'), ['0-9']);
    
$output '<div class="alphabetical-index">';
    
    
// Alphabet and number links at the top
    
$output .= '<div class="index-links">';
    foreach (
$index as $letter) {
        
$output .= '<button class="index-link" data-letter="' $letter '">' strtoupper($letter) . '</button>';
    }
    
$output .= '</div>';

    
// Container for the posts (hidden initially)
    
$output .= '<div class="index-posts">';

    
// Loop through each letter and create a post list
    
foreach ($index as $letter) {
        
$output .= '<div class="index-posts-for-letter" id="posts-' $letter '" style="display: none;">';  // Hidden by default
        
$output .= '<h2 class="index-posts-title">' strtoupper($letter) . '</h2>';
        
$output .= '<ul class="index-post-list">';

        
// Query the posts for the current letter (this is handled via the URL)
        
$args = array(
            
'post_type'      => 'post',
            
'posts_per_page' => -1,
            
'orderby'        => 'title',
            
'order'          => 'ASC',
            
'post_status'    => 'publish',
            
'cat'            => 123// Replace with your category ID
        
);

        
// Only show posts for the letter we want (based on URL parameter)
        
if (isset($_GET['letter']) && strtoupper($_GET['letter']) === strtoupper($letter)) {
            
add_filter('posts_where''filter_posts_by_first_letter'102);
        }

        
$query = new WP_Query($args);

        
// Remove the filter after the query
        
remove_filter('posts_where''filter_posts_by_first_letter');

        if (
$query->have_posts()) {
            while (
$query->have_posts()) {
                
$query->the_post();
                
$output .= '<li class="index-post-item"><a href="' get_permalink() . '">' get_the_title() . '</a></li>';
            }
        } else {
            
$output .= '<li class="no-posts">No posts found for this letter/number in the selected category.</li>';
        }

        
wp_reset_postdata();
        
$output .= '</ul>';
        
$output .= '</div>';  // End of posts for this letter
    
}

    
$output .= '</div>';  // End of index-posts container
    
$output .= '</div>';  // End of alphabetical-index container
    
return $output;
}

add_shortcode('alphabetical_index''generate_alphabetical_index');

// Function to filter posts by the first letter of the title
function filter_posts_by_first_letter($where$query) {
    if (
$query->is_main_query() && !is_admin()) {
        global 
$wpdb;
        
// Get the selected letter from the URL (query parameter)
        
if (isset($_GET['letter']) && !empty($_GET['letter'])) {
            
$letter strtoupper($_GET['letter']);
            
// Modify the WHERE clause to check if the title starts with the selected letter
            
$where .= " AND {$wpdb->posts}.post_title LIKE '{$letter}%'";
        }
    }
    return 
$where;
}
?>


[ Bericht 67% gewijzigd door Solispolar op 12-11-2024 12:30:05 ]
pi_215557619
Zet het even tussen php tags, dat leest wat makkelijker.
pi_215557636
quote:
3s.gif Op dinsdag 12 november 2024 12:28 schreef Farenji het volgende:
Zet het even tussen php tags, dat leest wat makkelijker.
Ik wist niet dat dat een ding was, exuus. Aangepast ;)
pi_215557729
Niet getest, maar moet je die filter niet pas verwijderen nadat je alle posts hebt opgehaald?

Oh en ik zou deze code niet op een publiek toegankelijke site gebruiken, is nogal kwetsbaar voor sql injectie. Sowieso slecht idee om code door chatgpt te laten schrijven als je zelf niet de skills hebt om de code goed te checken en debuggen.
pi_215558202
quote:
1s.gif Op dinsdag 12 november 2024 12:41 schreef Farenji het volgende:
Niet getest, maar moet je die filter niet pas verwijderen nadat je alle posts hebt opgehaald?

Oh en ik zou deze code niet op een publiek toegankelijke site gebruiken, is nogal kwetsbaar voor sql injectie. Sowieso slecht idee om code door chatgpt te laten schrijven als je zelf niet de skills hebt om de code goed te checken en debuggen.
Ik ben helemaal niet technisch aangelegd hoor, dus ik zit eigenlijk überhaupt niet in de codering en dergelijke ;) Echter is deze functionaliteit vrij essentieel voor mijn website en is de enige plugin (die ik normaal wat meer zou gebruiken) niet meer beschikbaar.. Dit is dus eigenlijk de eerste (en laatste) code die ik sowieso ga gebruiken, Wordpress voorziet verder prima in alle wensen :)

Ik snap denk ik niet precies wat je met je eerste zin bedoelt. Welk filter moet ik verwijderen en wat bedoel je met posts ophalen?
pi_215558388
Wat ik bedoelde is dat je remove_filter pas doet nadat je de lijst van post print (dus na dat hele if/else blok "if ($query->have_posts()") . Dus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
        
// Only show posts for the letter we want (based on URL parameter)
        
if (isset($_GET['letter']) && strtoupper($_GET['letter']) === strtoupper($letter)) {
            
add_filter('posts_where''filter_posts_by_first_letter'102);
        }

        
$query = new WP_Query($args);

        if (
$query->have_posts()) {
            while (
$query->have_posts()) {
                
$query->the_post();
                
$output .= '<li class="index-post-item"><a href="' get_permalink() . '">' get_the_title() . '</a></li>';
            }
        } else {
            
$output .= '<li class="no-posts">No posts found for this letter/number in the selected category.</li>';
        }

        
// Remove the filter after the query
        
remove_filter('posts_where''filter_posts_by_first_letter');
?>
pi_215558484
quote:
0s.gif Op dinsdag 12 november 2024 13:50 schreef Farenji het volgende:
Wat ik bedoelde is dat je remove_filter pas doet nadat je de lijst van post print (dus na dat hele if/else blok "if ($query->have_posts()") . Dus:
[ code verwijderd ]

Ik ben echt een complete noob in coderen sorry _O- Is het stukje code wat jij nu post iets wat ik moet vervangen of ergens toe moet voegen?
pi_215558608
quote:
0s.gif Op dinsdag 12 november 2024 14:02 schreef Solispolar het volgende:

[..]
Ik ben echt een complete noob in coderen sorry _O- Is het stukje code wat jij nu post iets wat ik moet vervangen of ergens toe moet voegen?
Je moet regel 41/41 ("// Remove the filter after the query" en de volgende regel) naar beneden verplaatsen, naar wat nu regel 51 is.
pi_215558699
quote:
0s.gif Op dinsdag 12 november 2024 14:22 schreef Farenji het volgende:

[..]
Je moet regel 41/41 ("// Remove the filter after the query" en de volgende regel) naar beneden verplaatsen, naar wat nu regel 51 is.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
function generate_alphabetical_index() {
    
// Define the index: alphabet A-Z and the numeric 0-9
    
$index array_merge(range('A''Z'), ['0-9']);
    
$output '<div class="alphabetical-index">';
    
    
// Alphabet and number links at the top
    
$output .= '<div class="index-links">';
    foreach (
$index as $letter) {
        
$output .= '<button class="index-link" data-letter="' $letter '">' strtoupper($letter) . '</button>';
    }
    
$output .= '</div>';

    
// Container for the posts (hidden initially)
    
$output .= '<div class="index-posts">';

    
// Loop through each letter and create a post list
    
foreach ($index as $letter) {
        
$output .= '<div class="index-posts-for-letter" id="posts-' $letter '" style="display: none;">';  // Hidden by default
        
$output .= '<h2 class="index-posts-title">' strtoupper($letter) . '</h2>';
        
$output .= '<ul class="index-post-list">';

        
// Arguments for WP_Query to fetch posts in a specific category (replace `123` with your category ID)
        
$args = array(
            
'post_type'      => 'post',
            
'posts_per_page' => -1,
            
'orderby'        => 'title',
            
'order'          => 'ASC',
            
'post_status'    => 'publish',
            
'cat'            => 9// Replace with your category ID or use category_name => 'slug'
        
);

        
// Check if a 'letter' URL parameter is set
        
if (isset($_GET['letter']) && strtoupper($_GET['letter']) === strtoupper($letter)) {
            
add_filter('posts_where''filter_posts_by_first_letter'102);
        }

        
// Query posts
        
$query = new WP_Query($args);

        if (
$query->have_posts()) {
            while (
$query->have_posts()) {
                
$query->the_post();
                
$output .= '<li class="index-post-item"><a href="' get_permalink() . '">' get_the_title() . '</a></li>';
            }
        } else {
            
$output .= '<li class="no-posts">No posts found for this letter/number in the selected category.</li>';
        }

        
// Remove the filter after the query runs
        
remove_filter('posts_where''filter_posts_by_first_letter');
        
        
wp_reset_postdata();
        
$output .= '</ul>';
        
$output .= '</div>';  // End of posts for this letter
    
}

    
$output .= '</div>';  // End of index-posts container
    
$output .= '</div>';  // End of alphabetical-index container
    
return $output;
}

add_shortcode('alphabetical_index''generate_alphabetical_index');

// Function to filter posts by the first letter of the title
function filter_posts_by_first_letter($where$query) {
    global 
$wpdb;
    if (
$query->is_main_query() && !is_admin()) {
        
// Check for the 'letter' parameter in the URL and apply the filter
        
if (isset($_GET['letter']) && !empty($_GET['letter'])) {
            
$letter strtoupper($_GET['letter']);
            
// Modify the WHERE clause to only show posts starting with the selected letter
            
$where .= " AND {$wpdb->posts}.post_title LIKE '{$letter}%'";
        }
    }
    return 
$where;
}
?>

Zoals dit bedoel je? Dit verandert helaas niks voor de site..
pi_215576487
Even een kleine update voor de geïnteresseerden (dat zullen er niet veel zijn, maar goed :P) Ik heb het nu aardig zoals ik het zelf voor ogen had en echt volledig door chatGPT _O- Gewoon begonnen met een basisscript zonder verdere opmaak en zinnetje voor zinnetje dingen toegevoegd.. uiteindelijk een perfect werkende index gekregen inclusief opmaak/java voor soepele transities etc.. top *O*
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')