wordpress custom-field – buscando en el metacampo personalizado

Pregunta:

Tengo múltiples campos personalizados en un tipo de publicación. Puedo guardar datos, actualizar y mostrar, todo bien. ahora estoy haciendo el motor de búsqueda. al ser una biblioteca, debe ser posible buscar en campos específicos (campo personalizado), editorial, país, etc. Aquí el código que tengo para editor …

abro una variable

    function register_query_vars( $vars ) {
    $vars[] = 'publisher'; //
    return $vars;
} 
add_filter( 'query_vars', 'register_query_vars' );

formulario de búsqueda por editor en shortcode

function publisher_search() {
    add_shortcode( 'search_form_publisher', 'search_form_publisher' );
}
add_action( 'init', 'publisher_search' );

formulario:

function search_form_publisher( $atts ){
 
    $output = '<form action="' . esc_url( home_url() ) . '" method="get" role="search">';
    $output .= '<input type="text" name="publisher" value="' . get_search_query() . '" class="field" placeholder="Search..."/>';
    $output .= '<input type="hidden" name="post_type" value="books" />';
    $output .= '<input type="submit" value="Search!" class="button" />';
    $output .= '</form>';
    return $output;
}

hasta ahora todo bien. al buscar, se crea la siguiente URL:

http://localhost/library/?publisher=search_term&post_type=books

que usa la plantilla archive- {post-type} .php

$args = array(
  'post_type'      => 'books',
  'post_status'    => 'publish',
  'meta_query'     => array(
    array(
      'key'     => 'publisher',
      'value'   => get_query_var('publisher'),
      'compare' => 'LIKE',

    ) 
  )
);

// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {

    while ( $the_query->have_posts() ) : $the_query->the_post(); 
        // Your code here

   publisher();
       
    endwhile;

} else {
        echo 'no posts found';
}
/* Restore original Post Data */
wp_reset_postdata();

Imprimo el valor del editor de campo personalizado de esta manera, funciona bien:

function publisher() {
    global $wp_query;
    $post = $wp_query->post;
    $publisher = get_post_meta($post->ID, 'publisher', true);
    if (!empty($publisher)) {
        echo $publisher;
    }
}

Sin embargo, el problema es que la consulta no devuelve ningún resultado. la impresión es esta:

Array ( [post_type] => books [post_status] => publish [meta_query] => Array ( [0] => Array ( [key] => publisher [value] => Harvard [compare] => LIKE ) ) )

es decir, si recopila el valor del término de búsqueda. He probado muchos códigos que he encontrado en Internet, pero ninguno funciona. Creo que una función que agrega un filtro posts_search, pero las que he probado no funcionan.

Agradecería su ayuda para resolver el problema. Estoy perdido. ¡¡Gracias!!

Respuesta:

Después de pensar en el problema, encontré la solución más simple, hacer una consulta directa usando $ wpdb

en archivo- {post-type} .php

<?php 

global $wpdb;
$meta_key = get_query_var('publisher');
$result = $wpdb->get_results("
    SELECT  * 
    FROM  " . $wpdb->prefix. "postmeta_books 
    WHERE publisher LIKE  '%$meta_key%' 
");
foreach( $result as $results ) {

        echo $results->publisher;
        echo '<br/>';
        

    }
?>

Es la consulta básica, necesita ser refinada pero quería compartirla para cerrar la pregunta. por supuesto funciona muy bien.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım