• Resolved islp

    (@islp)


    In a website I use an old commercial theme (not updated anymore).

    The theme features a custom post type for Events. So, by clicking the left menu I get to the main Events page, where I find the list of any event (the traditional WP table list).

    The problem: since I’m NOT the administrator of the website, I never noticed the table doesn’t sort correctly the posts. To have it working I have to click two times the Date label in the header. I don’t know if this has always been its behavior because I never received any complaint.

    I searched anywhere through the files of the theme but I could not find what is causing this issue (moreover, some years ago I made a plugin for this website and the plugin features an identical table that shows no issue).

    Apparently, the only thing related to Events is the following (I found it in a theme-init file):

    function events_post_register()

    {$labels = array(
    'name' => __('Events', 'taxonomy general name', CORE_THEME_NAME),
    'singular_name' => __('Event', CORE_THEME_NAME),
    'search_items' => __('Search Events', CORE_THEME_NAME),
    'all_items' => __('All Events', CORE_THEME_NAME),
    'parent_item' => __('Parent Event', CORE_THEME_NAME),
    'edit_item' => __('Edit Event', CORE_THEME_NAME),
    'update_item' => __('Update Event', CORE_THEME_NAME),
    'add_new_item' => __('Add New Event', CORE_THEME_NAME),
    'menu_name' => __('Events', CORE_THEME_NAME)
    );

    $args = array(
    'labels' => $labels,
    'singular_label' => __('Events', CORE_THEME_NAME),
    'public' => true,
    'show_ui' => true,
    'show_in_nav_menus' => true,
    'hierarchical' => true,
    'exclude_from_search' => true,
    'capability_type' => 'post',
    'query_var' => 'event',
    'rewrite' => array(
    'slug' => 'event',
    'with_front' => false,
    ),
    'menu_icon' => 'dashicons-calendar',
    'supports' => array(
    'title',
    'editor',
    'thumbnail',
    'excerpt',
    'comments',
    'custom-fields'
    )
    );

    register_post_type( 'event', $args );

    }

    Any help is appreciated. ??

Viewing 6 replies - 1 through 6 (of 6 total)
  • Without knowing the theme and all its programming, it is very difficult to answer this question. The sorting behavior could be influenced by the theme, but there are many ways to do this. One tip would be to check whether the pre_get_posts hook is being used. Or another one you could use to influence WP_Query.

    If you can’t find it, I would recommend that you first contact the administrator of the project. Alternatively, you can also look for someone who can support you personally, e.g. here: https://jobs.wordpress.net/

    Thread Starter islp

    (@islp)

    @threadi In the meanwhile, I solved this way (still not perfect, but at the moment works fine):

    function my_2410_events_order($wp_query){

    if (is_admin()) {

    global $post_type, $pagenow;

    if ($pagenow == ‘edit.php’ && $post_type == ‘event’) {

    $wp_query->set(‘orderby’, ‘date’);
    $wp_query->set(‘order’, ‘DESC’);

    }
    }
    }

    add_filter(‘pre_get_posts’, ‘my_2410_events_order’);

    Great if you have found a solution. However, you will never be able to change the sort order again (except in the code). Just as a hint.

    Next time you can also use the code block for code here in the forum: https://www.ads-software.com/support/forum-user-guide/block-editor/#code-block

    Thread Starter islp

    (@islp)

    @threadi I suppose you’re talking about the result of clicking the Date label. I don’t know if this behavior can be changed but it’s not a big issue at the moment: posts were loaded in no particular order, before (if there was an order I could not find what order, honestly).

    Thanks for the code block suggestion.

    Thread Starter islp

    (@islp)

    @threadi A very basic way to make the Date label work again is the following, but I don’t know if in the WP world there’s a better way to achieve the same goal:

    function patch_events_list_order_102024($wp_query)
    {

    if (is_admin()) {

    global $post_type, $pagenow;

    if ($pagenow == 'edit.php' && $post_type == 'event') {

    $o = !isset($_GET['order']) && 'desc';

    if (isset($_GET['order']) && in_array($_GET['order'], ['asc', 'desc'])) {
    $o = $_GET['order'];
    } else {
    $o = 'desc';
    }

    $wp_query->set('orderby', 'date');
    $wp_query->set('order', strtoupper($o));
    }
    }
    }

    I tried this one too, but it didn’t work:

    $k = get_query_var('order', 0);
    $o = $k == 0 || ($k != 0 && $k == 'desc') ? 'desc' : 'asc';
    • This reply was modified 1 day, 20 hours ago by islp.
    Thread Starter islp

    (@islp)

    I ended up compacting the previous code:

    $k = $_GET['order'];
    $o = isset($k) && in_array($k, ['asc', 'desc']) ? $k : 'desc';
Viewing 6 replies - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.