سؤال

function fws_admin_posts_filter( $query ) {
global $pagenow;
if ( is_admin() && $pagenow == 'edit.php' && !empty($_GET['my_parent_pages'])) {
    $query->query_vars['post_parent'] = $_GET['my_parent_pages'];
}
}

add_filter( 'parse_query', 'fws_admin_posts_filter' );

function admin_page_filter_parentpages() {
global $wpdb;
if (isset($_GET['post_type']) && $_GET['post_type'] == 'books') {
    $sql = "SELECT ID, post_title FROM ".$wpdb->posts." WHERE post_type = 'books' AND post_parent = 0 AND post_status = 'publish' ORDER BY post_title";
    $parent_pages = $wpdb->get_results($sql, OBJECT_K);
    $select = '
        <select name="my_parent_pages">
            <option value="">Parent Pages</option>';
    $current = isset($_GET['my_parent_pages']) ? $_GET['my_parent_pages'] : '';
    foreach ($parent_pages as $page) {
        $select .= sprintf('
            <option value="%s"%s>%s</option>', $page->ID, $page->ID == $current ? ' selected="selected"' : '', $page->post_title);
    }
    $select .= '
        </select>';
    echo $select;
} else {
    return;
   }
 }
 add_action( 'restrict_manage_posts', 'admin_page_filter_parentpages' );

This code gives me the expended filter dropdown option but once I select one of the option and hit filter then the return page is empty.

enter image description here

Once I select one of them and hit filter, the result page can't bring back the result. enter image description here

هل كانت مفيدة؟

المحلول

Let's if it helps you. Instead of adding a custom query var if we can use directly from url that might solve the issu. First make post_parent loadable from url.

function make_post_parent_public_qv() {
    global $pagenow;
    if ( is_admin() && $pagenow == 'edit.php' )
        $GLOBALS['wp']->add_query_var( 'post_parent' );
}
add_action( 'init', 'make_post_parent_public_qv' );

Now focus on the filter:

function admin_page_filter_parentpages() {
    global $wpdb;
    if (isset($_GET['post_type']) && $_GET['post_type'] == 'books') {
        $sql = "SELECT ID, post_title FROM ".$wpdb->posts." WHERE post_type = 'books' AND post_parent = 0 AND post_status = 'publish' ORDER BY post_title";
        $parent_pages = $wpdb->get_results($sql, OBJECT_K);
        $select = '
            <select name="post_parent">
                <option value="">Parent Pages</option>';
                $current = isset($_GET['post_parent']) ? $_GET['post_parent'] : '';
                foreach ($parent_pages as $page) {
                    $select .= sprintf('<option value="%s"%s>%s</option>', $page->ID, $page->ID == $current ? ' selected="selected"' : '', $page->post_title);
                }
        $select .= '
            </select>';
        echo $select;
    } else {
        return;
   }
}
add_action( 'restrict_manage_posts', 'admin_page_filter_parentpages' );

Give it a try and let me know.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى wordpress.stackexchange
scroll top