Respuestas de foro creadas

Viendo 10 respuestas - de la 1 a la 10 (de un total de 10)
  • Iniciador del debate Enery88

    (@enery88)

    Hola @josearcos y @carloslongarela, gracias por vuestra ayuda. Pues veréis, lo que sucede es que comparo es array con otra que viene de la base de datos, y me he dado cuenta que debo dejarla como un string sin la función de traducción, así que ahora ahí no tengo el problema sino aquí, no se porque me pasa lo mismo con el texto del option que con el array que puse en el tema. no me da error el plugin de loco translate pero tampoco me encuentra esas cadenas para traducir.

    function display_custom_channel_fields($post){ ?>
    <div class="form-field form-required wrap">
    	<label for="_month_field"><?= __( 'Month', 'textdomain' ) ?></label>
    	<select class="select post-form" id="_month" name="_month_field" value="<?= esc_attr( $month ) ?>" required>
    <?php
    $months_of_year = array('January','February','March','April','May','June','July','August','September','October','November','December');
    					
    foreach($months_of_year as $month_of_year) {
    	$selected= (esc_attr( $month ) == $month_of_year)? 'selected' : ''; ?>
    	<option <?= $selected ?> value="<?= esc_attr( $month_of_year ) ?>"><?= __($month_of_year,'mgm') ?></option>
    <?php } ?>
    	</select>
    </div>
    <?php } ?>
    Iniciador del debate Enery88

    (@enery88)

    Ya he descubierto que es lo que causa este problema. Al parecer la función load_plugin_textdomain(), uno de los parametros que se le pasa esta obsoleto, por tanto da error.
    Esta es la version antigua:

    load_plugin_textdomain( $domain,plugin_dir_path(__FILE__).'languages' )

    Esta la nueva versión:

    load_plugin_textdomain( $domain,false,plugin_dir_path(__FILE__) )

    • Esta respuesta fue modificada hace 3 años, 3 meses por Enery88.
    Iniciador del debate Enery88

    (@enery88)

    Lo cierto es que se podría hacer con una consulta a la bbdd, pero no quería forzarlo hasta ese punto. Muchísimas gracias por tu ayuda me ha sido muy útil!! 🙂

    Iniciador del debate Enery88

    (@enery88)

    Esta es la solución final a la pregunta de la query con dos postmeta en una sola consulta para filtros.

    $query->set( 'orderby', 'date' );
    			$query->set( 'order', 'DESC' );
    			$meta_query[]= array(
    				array(
    					'key'			=> '_year_field',
    					'value'		=> sanitize_text_field( $_GET['admin_filter_year'] ),
    					'compare'	=> '='
    				),
    				array(
    					'key' 		=> '_month_field',
    					'value'		=> sanitize_text_field( $_GET['admin_filter_month'] ),
    					'compare'	=> '='
    				) );
    
    			$query->set( 'meta_query', $meta_query );
    Iniciador del debate Enery88

    (@enery88)

    Hola @carloslongarela!!
    Al final estue mirandoloque me has comentado y tratando de hacer una query menos compleja pero me ha sido dificil y aun asi no me he funcionado, apesar de todos los consejos que me has dado. asi que he pensado. ¿Crees que podría recoger los resultados de una consulta y dentro de esa condicional introducir una consulta sobre los resultados de la consulta anterior? No se si me explico bien, me refiero a guardar los resultados de busqueda de por ejemplo el filtro year y dentro de esa condicional preguntar por el otro campo que es month, y realizar una consulta con los datos de month sobre los resultados que nos da la consulta sobre el campo year.

    Iniciador del debate Enery88

    (@enery88)

    Hola @almendron!!
    Ante todo gracias por tu ayuda!! 🙂
    Tal y como me has sugerido he mirado los logs de worpdress y el problema que me he encontrado es que no me da ningún problema. Solo me aparece una notificacion de argumento obsoleto en la función load_plugin_textdomain() y un stack trace:

    [12-Jun-2018 00:36:37 UTC] PHP Stack trace:
    [12-Jun-2018 00:36:37 UTC] PHP   1. {main}() /home/vagrant/code/wordpress/wp-admin/plugins.php:0
    [12-Jun-2018 00:36:37 UTC] PHP   2. activate_plugin() /home/vagrant/code/wordpress/wp-admin/plugins.php:43
    [12-Jun-2018 00:36:37 UTC] PHP   3. do_action() /home/vagrant/code/wordpress/wp-admin/includes/plugin.php:586
    [12-Jun-2018 00:36:37 UTC] PHP   4. WP_Hook->do_action() /home/vagrant/code/wordpress/wp-includes/plugin.php:453
    [12-Jun-2018 00:36:37 UTC] PHP   5. WP_Hook->apply_filters() /home/vagrant/code/wordpress/wp-includes/class-wp-hook.php:310
    [12-Jun-2018 00:36:37 UTC] PHP   6. install_mi_plugin() /home/vagrant/code/wordpress/wp-includes/class-wp-hook.php:286
    [12-Jun-2018 00:36:37 UTC] PHP   7. load_plugin_textdomain() /home/vagrant/code/wordpress/wp-content/plugins/mi-plugin/mi-plugin.php:26
    [12-Jun-2018 00:36:37 UTC] PHP   8. _deprecated_argument() /home/vagrant/code/wordpress/wp-includes/l10n.php:726
    [12-Jun-2018 00:36:37 UTC] PHP   9. trigger_error() /home/vagrant/code/wordpress/wp-includes/functions.php:4035
    Iniciador del debate Enery88

    (@enery88)

    Gracias @carloslongarela.

    Al final he optado por realizar una condicional para hacer una consulta en función de los filtros. Me explico, finalmente he unido los dos selects en la misma función, y las sentencias a la bbdd las he metido juntas en una función así que en vez de tener 4 funciones, ahora tengo dos. Por una parte tengo la función que muestra los selects y por otra parte la que hace las consultas.

    La duda que me surge ahora es la consulta a la bbdd de wp cuando me llegan ambos campos year y month. Resulta que en la bbdd directamente si me funciona pero cuando en wp empleo ambos filter, no le gusta demasiado la consulta.

    function cpt_posts_filters( $query ){
    	global $wpdb;
    	global $pagenow;
    	$type = 'post';
    
    	if(isset($_GET['post_type'])) {
    		$type = $_GET['post_type'];
    	}
    
    	if( $type == 'cpt' && is_admin() && $pagenow=='edit.php'){
    
    		if( (isset($_GET['admin_filter_year']) && $_GET['admin_filter_year'] != '') && (isset($_GET['admin_filter_month']) && $_GET['admin_filter_month'] != '') ){
    			$query->get_result('SELECT * FROM '.$wpdb->prefix.'posts WHERE EXISTS
    			(SELECT meta_key FROM '.$wpdb->prefix.'postmeta WHERE '.$wpdb->prefix.'postmeta.post_id='.$wpdb->prefix.'posts.ID AND meta_value='.$_GET['admin_filter_month'].')
    			AND EXISTS
    			(SELECT meta_key FROM '.$wpdb->prefix.'postmeta WHERE '.$wpdb->prefix.'postmeta.post_id='.$wpdb->prefix.'posts.ID AND meta_value='.$_GET['admin_filter_year'].')');
    		}
    		else if( isset($_GET['admin_filter_year']) && $_GET['admin_filter_year'] != '' ) {
    			$query->query_vars['meta_key'] = '_year_field';
    			$query->query_vars['meta_value'] = $_GET['admin_filter_year'];
    		}
    		else if( isset($_GET['admin_filter_month']) && $_GET['admin_filter_month'] != '' ){
    			$query->query_vars['meta_key'] = '_month_field';
    			$query->query_vars['meta_value'] = $_GET['admin_filter_month'];
    		}
    
    	}
    }
    add_filter( 'parse_query', 'cpt_posts_filters' );

    ¿Por qué puede ser?

    Iniciador del debate Enery88

    (@enery88)

    Hola, @carloslongarela, tengo una duda acerca de la sentencia a la base de datos que tengo que hacer en el código que enseño arriba. Debo abrir nuevo debate o en este puedo hacer la consulta?

    Iniciador del debate Enery88

    (@enery88)

    Muchísimas gracias @carloslongarela !! 🙂

    Iniciador del debate Enery88

    (@enery88)

    Muchas gracias @carloslongarela, otra pregunta relacionado con esto. Crees que para hacer la consulta podré realizar la sentencia en mysql directamente con la función get_results() ? o debería hacerlo con el objeto WP_Query? con el objeto wp_query me refiero a la estructura de argumentos que se suele pasar a get_posts(), por ejemplo, no al objeto como tal, porque se que no hay otra forma de sacar los datos sino es a través de wp-query objeto.

    Muchas gracias!!

    • Esta respuesta fue modificada hace 3 años, 3 meses por Enery88.
Viendo 10 respuestas - de la 1 a la 10 (de un total de 10)