es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cambiar consulta de búsqueda de un tipo de contenido personalizado en el panel de administración de WordPress.

Quiero cambiar la consulta de búsqueda de un tipo de publicación personalizado en el panel de administración de WordPress. Utilizo este método:

function change_admin_search( $query ) {

    $post_type = 'custom_post_type';

    if( ! is_admin() )
        return;

    if ( $query->query['post_type'] != $post_type )
        return;

    $search_term = $query->query_vars['s'];
    $persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
    $num = range(0, 9);
    $persianNumbersOnly = str_replace( $num,$persian, $search_term);
    $englishNumbersOnly = str_replace( $persian, $num, $search_term);
    $query->query_vars['s'] = $englishNumbersOnly;
}

add_action( 'pre_get_posts', 'change_admin_search' );

En esta consulta, solo busca con $englishNumbersOnly. Quiero buscar con $englishNumbersOnly O $persianNumbersOnly, y $query->query_vars['s'] debería tener un OR en la consulta. En realidad, la consulta debería verse así:

post Like "%$englishNumbersOnly%" OR post Like "%$persianNumbersOnly%"

Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para cambiar la consulta de búsqueda en el panel de administración de WordPress para incluir tanto $englishNumbersOnly como $persianNumbersOnly, puedes modificar la función change_admin_search de esta manera:

    function change_admin_search( $query ) {
    
        $post_type = 'custom_post_type';
    
        if( ! is_admin() )
            return;
    
        if ( $query->query['post_type'] != $post_type )
            return;
    
        $search_term = $query->query_vars['s'];
        $persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
        $num = range(0, 9);
        $persianNumbersOnly = str_replace( $num,$persian, $search_term);
        $englishNumbersOnly = str_replace( $persian, $num, $search_term);
        $query->set( 'meta_query', array(
            'relation' => 'OR',
            array(
                'key' => 'your_custom_field_name',
                'value' => $englishNumbersOnly,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'your_custom_field_name',
                'value' => $persianNumbersOnly,
                'compare' => 'LIKE'
            )
        ) );
    }
    
    add_action( 'pre_get_posts', 'change_admin_search' );
    

    En esta función modificada, establecemos el parámetro meta_query en el objeto $query como una nueva matriz que incluye dos sub-arrays:

    • El primer sub-array especifica una key con el nombre de tu campo personalizado, un value de $englishNumbersOnly y un valor de comparación (compare) de LIKE.
    • El segundo sub-array especifica la misma key y un value de $persianNumbersOnly.

    Dado que el parámetro relation está establecido en OR, esto producirá una consulta que busca publicaciones cuyo valor en el campo personalizado coincida con $englishNumbersOnly o $persianNumbersOnly.

Comments are closed.