Pregunta sobre Developing with WordPress de Wordpress:

WordPress no reconoce los filtros de correo $ _GET

Un usuario preguntó 👇

Hola

Tengo que aplicar filtros a la lista de publicaciones en cada página de plantilla, así que inserté el código a continuación como se describe en Este artículo simplemente obtenga una página en blanco haciendo clic en el botón enviar:

<form class="post-filters">
	<select name="orderby">
		<?php
			$orderby_options = array(
				'post_date' => 'Order By Date',
				'post_title' => 'Order By Title',
				'rand' => 'Random Order'
			);
			foreach($orderby_options as $value => $label):
				echo '<option '.selected($_GET['orderby'], $value).' value="'.$value.'">'.$label.'</option>';
			endforeach;
		?>
	</select>
	<input type="submit" value="Filter">
</form>

El artículo dice ‘WordPress ya sabe lo que significan el comando y los parámetros del comando y los usa en la consulta predeterminada’, pero aparentemente WP no lo sabe y muestra lo siguiente en la barra de direcciones web sin marcado en la página (donde ‘raíz’ se llama ‘directorio’):

http: // localhost: 8888 / test /? orderby = post_title

Dígale a alguien si WordPress puede analizar las variables $ _GET y si puedo dirigirlo a un tutorial que explique cómo aplicar filtros de trabajo sin recurrir a plugins.

Gracias por adelantado.

Este tema fue modificado hace 1 año, 6 meses por.

(@magentomaster)

Hace 1 año, 6 meses

usa el código stick aquí puedes obtener el título de la publicación

$selectedValue= 'Hello world!'; //you can set $_GET value here as $selectedValue = $_GET['orderby'];
if(isset($_POST['submit']))
{
echo $_POST['postTitle'];//here you can get post id after form submission
}
$orderby_options = array(
'post_date' => 'Order By Date',
'post_title' => 'Order By Title',
'rand' => 'Random Order'
);
$post =get_posts( $orderby_options );//get all post here
?>
<form method="post">
    <select name="postTitle">
        <?php
        for($i = 0; $i < count($post); $i++) {
            $data = $post[$i];
            $postTitle = $data->post_title;
            $postId = $data->ID;
            ?>
            <option value="<?php echo $postId; ?>" <?php if($postTitle == $postTitle) echo 'selected="selected"'; ?>><?php echo $postTitle; ?></option>
            <?php
        }
        ?>
    </select>
    <input type="submit" name="submit" value="submit">
</form>

Esta respuesta fue modificada hace 1 año, 6 meses. Esta respuesta fue modificada hace 1 año, 6 meses.

(@bcworkz)

Hace 1 año, 6 meses

WP solo reconoce argumentos ordenados compatibles. «Post_title» no es uno de ellos. Necesita un «título». Los argumentos admitidos no se corresponden directamente con los nombres de las columnas de la tabla o las propiedades de la clase, como cabría esperar. La lista de argumentos respaldados se encuentra en el Codex.

DESC es el comando predeterminado, por lo que su URL puede ser http: // localhost: 8888 / test /? orderby = title & order = ASC para obtener el orden alfabético normal de AZ y no ZA.

(@eadwig)

Hace 1 año, 6 meses

Sustituir o hacer referencia a ‘post_title’ http: // localhost: 8888 / test /? orderby = title & order = ASC Devolví la misma página en blanco sin que apareciera ningún código en la fuente de la página. El plugin de búsqueda y filtro también devuelve la página en blanco. Esto me hizo pensar que podría haber algo fundamentalmente incorrecto con el código en la plantilla de página como se muestra en la parte superior de esta publicación. ¿WP necesita una plantilla de página separada para el filtrado posterior?

También probé el código proporcionado por @magentomaster arriba y generó un filtro que contenía una lista de títulos de publicaciones. Sin embargo, ninguno de los títulos de trabajo hace clic en la lista.

Agradeceríamos algunas otras sugerencias.

(@eadwig)

Hace 1 año, 6 meses

El inspector de código de Chrome envía el siguiente mensaje justo debajo

Aviso: índice no definido: orden en /Applications/MAMP/htdocs/test/wp-content/themes/wwwares/front-page.php en línea 17

Observo que el parámetro predeterminado es el ordenado, entonces, ¿qué podría haber en la sugerencia del mensaje?

(@bcworkz)

Hace 1 año, 6 meses

Imagino que hay una referencia a la línea 17 de la página principal.php $_GET['orderby'], que no estaría definido para las solicitudes normales de portada que no incluyen el orderby=title o un parámetro de URL similar, como la solicitud inicial antes de seleccionar una opción. Necesita un código más fuerte para proteger esto y aún permitir que el formulario falle en el valor seleccionado. Recomiendo agregar código que especifique una opción predeterminada cuando no se pasa ningún parámetro de comando.

$elected = array_key_exists('orderby', $_GET ) ? sanitize_text_field( $_GET['orderby']) : 'date';
echo '<option '.selected( $selected, $value ).' value="'.$value.'">'.$label.'</option>';

Tenga en cuenta que ‘fecha’ y ‘título’ deben reemplazarse por ‘post_date’ y ‘post_title’ como claves de su elección.

Es posible que WP no necesite una página separada para filtrar. Depende de tu tema y de la página que quieras filtrar. Si la página que desea filtrar ejecuta una consulta WP normal y un bucle que conduce a una lista de correo, los parámetros de URL correctos filtrarán las publicaciones enumeradas. Si la página solicitada ejecuta una consulta personalizada en su lugar, todo depende de cómo se construya la consulta. Puede funcionar, pero la mayoría de las consultas personalizadas tienen un propósito especial sin incluir el filtrado.

(@eadwig)

Hace 1 año, 6 meses

El filtro de correo comenzó a funcionar cuando el parámetro de comando se estableció como variable en el argumento WP_Query () como en:

$catFilter = array(
'category_name' => $catName,
'orderby' => $orderby
);
$catquery = new WP_Query($catFilter);

También incluyo el código de filtro en caso de que alguien más se meta en problemas (como @bcworkz sugirió anteriormente, es deseable incorporar robustez):

<form class="post-filters">
	<select name="orderby">
		<?php
			$orderby_options = array(
				'post_date' => 'Order By Date',
				'title' => 'Order By Title',
				'rand' => 'Random Order'
			);
			foreach($orderby_options as $value => $label):
				echo '<option '.selected($_GET['orderby'], $value).' value="'.$value.'">'.$label.'</option>';
			endforeach;
		?>
	</select>
	<input type="submit" value="Filter">
</form>

Para la página en blanco, el problema de la página en blanco se ha solucionado agregando ‘Sus pantallas de página de inicio’ en las publicaciones más recientes y reemplazando la página principal con index.php.

Todavía no entiendo por qué WP debe configurarse de esta manera, así que publiqué ‘El formulario comenzó a funcionar cuando se movió nuevamente a la configuración de lectura predeterminada, pero ¿por qué?’. Agradecería que alguien me respondiera en la nueva publicación.

¿Solucionó tu problema??

0 / 0

Deja una respuesta 0

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *