Thx! Had al even gekeken, maar deze is bijvoorbeeld al lang niet geupdate. Zal er vanavond nog eens wat beter naar kijken.quote: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/
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', 10, 2); } $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; } ?> |
Ik wist niet dat dat een ding was, exuus. Aangepastquote:Op dinsdag 12 november 2024 12:28 schreef Farenji het volgende:
Zet het even tussen php tags, dat leest wat makkelijker.
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 wensenquote: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.
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', 10, 2); } $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'); ?> |
Ik ben echt een complete noob in coderen sorry Is het stukje code wat jij nu post iets wat ik moet vervangen of ergens toe moet voegen?quote: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 ]
Je moet regel 41/41 ("// Remove the filter after the query" en de volgende regel) naar beneden verplaatsen, naar wat nu regel 51 is.quote:Op dinsdag 12 november 2024 14:02 schreef Solispolar het volgende:
[..]
Ik ben echt een complete noob in coderen sorry Is het stukje code wat jij nu post iets wat ik moet vervangen of ergens toe moet voegen?
quote: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', 10, 2); } // 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; } ?> |
|
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |