Saltar al contenido

Wordpress: filtrar por campo personalizado en el tipo de publicación personalizada en la página de administración

este problema se puede solucionar de diferentes formas, sin embargo te enseñamos la respuesta más completa en nuestra opinión.

Solución:

Y para mostrar el resultado de Filter, pruebe este código

add_filter( 'parse_query', 'prefix_parse_filter' );
function  prefix_parse_filter($query) 
   global $pagenow;
   $current_page = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';
   
   if ( is_admin() && 
     'competition' == $current_page &&
     'edit.php' == $pagenow && 
      isset( $_GET['competition-name'] ) && 
      $_GET['competition-name'] != '' ) 
   
    $competition_name                  = $_GET['competition-name'];
    $query->query_vars['meta_key']     = 'competition_name';
    $query->query_vars['meta_value']   = $competition_name;
    $query->query_vars['meta_compare'] = '=';
  

cambiar el meta key y el valor meta según sea necesario. Tomé "nombre de la competencia como meta_key y" nombre de la competencia "como nombre desplegable de selección.

Él restringir_manage_posts la acción desencadena la add_extra_tablenav() función, que es cómo agrega menús desplegables adicionales a su tabla de lista deseada.

En el siguiente ejemplo, primero nos aseguramos de que el Tipo de mensaje es correcto, y luego tomamos todos los valores DB almacenados contra el competition_name key en el postmeta tabla (debe cambiar la key nombre según sea necesario). La consulta es bastante básica y solo verifica si el Competencia se publica, toma solo valores únicos (no desea la duplicación en el menú desplegable) y luego los ordena alfabéticamente.

A continuación, verificamos los resultados (no tiene sentido generar el menú desplegable para nada) y luego construimos las opciones (incluido un valor predeterminado para mostrar todo). Finalmente se muestra el menú desplegable.

Como dije en mi comentario, este no es el final de la historia; necesitará algo de lógica para indicarle a List Table que solo muestre los resultados deseados cuando el filtro esté activo, pero lo dejaré para que lo revise y luego comience otra pregunta si necesita más ayuda. Insinuación - echa un vistazo al archivo /wp-admin/includes/class-wp-posts-list-table.phpy es padre .../wp-class-list-table.php

/**
 * Add extra dropdowns to the List Tables
 *
 * @param required string $post_type    The Post Type that is being displayed
 */
add_action('restrict_manage_posts', 'add_extra_tablenav');
function add_extra_tablenav($post_type)
    
    global $wpdb;
    
    /** Ensure this is the correct Post Type*/
    if($post_type !== 'competition')
        return;
    
    /** Grab the results from the DB */
    $query = $wpdb->prepare('
        SELECT DISTINCT pm.meta_value FROM %1$s pm
        LEFT JOIN %2$s p ON p.ID = pm.post_id
        WHERE pm.meta_key = "%3$s" 
        AND p.post_status = "%4$s" 
        AND p.post_type = "%5$s"
        ORDER BY "%6$s"',
        $wpdb->postmeta,
        $wpdb->posts,
        'competition_name', // Your meta key - change as required
        'publish',          // Post status - change as required
        $post_type,
        'competition_name'
    );
    $results = $wpdb->get_col($query);
    
    /** Ensure there are options to show */
    if(empty($results))
        return;

    // get selected option if there is one selected
    if (isset( $_GET['competition-name'] ) && $_GET['competition-name'] != '') 
        $selectedName = $_GET['competition-name'];
     else 
        $selectedName = -1;
    
    
    /** Grab all of the options that should be shown */
    $options[] = sprintf('', __('All Competitions', 'your-text-domain'));
    foreach($results as $result) :
        if ($result == $selectedName) 
            $options[] = sprintf('', esc_attr($result), $result);
         else 
            $options[] = sprintf('', esc_attr($result), $result);
        
    endforeach;

    /** Output the dropdown menu */
    echo '';


Te mostramos reseñas y valoraciones

Tienes la opción de proteger nuestro ensayo poniendo un comentario y valorándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.