因此,在我的网站侧栏上,我想放置一个小的过滤器表单,该表单将允许按特定搜索词过滤帖子并按评分对它们进行排序。
因此对于搜索部分,我使用此解决方法。这不是完美的,但效果很好。只是常规搜索:
<form method="get" id="searchform" action="">
<div>
<label for="s"></label><br/>
<select value="" name="s" id="s" >
<option value="town1">town1</option>
<option value="town2">town2</option>
<option value="town4">town4</option>
<option value="town5">town5</option>
</select>
<select name="test1">
<option value="ASC">ASC</option>
<option value="DSC">DSC</option>
</select>
<input onclick="myfunction()" type="submit" id="searchsubmit" value="Find" />
</div>
</form>
但是我对ASC / DSC按等级排序有疑问。想法是,在每个帖子中,我都有不同的数值(赋值),它们分配给<p>
元素
例如:
<p id="test">5.5<p>
<p id="test">0.5<p>
<p id="test">3.5<p>
<p id="test">1.5<p>
因此,我想让用户能够按城镇名称搜索帖子(此功能已经起作用)并通过搜集(ASC或DSC)进行排序,并且不仅要回显帖子标题列表,还希望以常规方式显示帖子(例如:标题,摘录等)
到目前为止,通过袭击进行的排序使所有事情变得混乱,因为我不知道如果必须按<p>
ID对其进行排序以及如何连接这两个规则(搜索和排序),该怎么做。
我的功能代码:
<?php
function myfunction( ) {
$args = array(
'orderby' => jQuery('#test'),
'order' => 'DESC',
);
$query = new WP_Query( $args );
}
?>
答案 0 :(得分:0)
显然jQuery('#test')
不能像PHP那样工作。同样不可能使用onclick="myfunction()"
来调用PHP函数。 JS在客户端计算机上执行,PHP在服务器上执行。这永远都行不通。
除非您使用AJAX,否则无法使用JS调用PHP函数。
<body>
<form method="get" id="searchform" action="">
<div>
<label for="s"></label><br/>
<select name="s" id="s">
<option value="town1">town1</option>
<!------------ -->
</select>
<select name="test1">
<option value="ASC">ASC</option>
<option value="DSC">DSC</option>
</select>
<input type="submit" id="searchsubmit" value="Find"/>
</div>
</form>
<div id="posts"></div>
<script>
jQuery( document ).ready( function ( $ ) {
$( "#searchsubmit" ).on( "click", function ( e ) {
$.ajax( {
type: "POST",
url: "/admin_ajax.php",
data: {
action: "my_action",
orderby: $( "#s" ).val(),
order: $( "#test1" ).val()
},
success: function ( result ) {
$( "#posts" ).html( result );
}
} );
e.preventDefault();
} );
} );
</script>
</body>
PHP:
<?php
add_action('wp_ajax_my_action', 'myPHPFunction');
add_action('wp_ajax_nopriv_my_action', 'myPHPFunction');
function myPHPFunction()
{
if (!isset($_POST['orderby']) || !isset($_POST['order'])) {
return;
}
$args = array(
'orderby' => $_POST['orderby'],
'order' => $_POST['order'],
);
$query = new WP_Query( $args );
// loop through your posts and echo the templates
// stop execution
wp_die();
}