WordPress按“搜索词”和“帖子评级”发布订单

时间:2019-01-20 11:44:56

标签: wordpress sorting element

因此,在我的网站侧栏上,我想放置一个小的过滤器表单,该表单将允许按特定搜索词过滤帖子并按评分对它们进行排序。

因此对于搜索部分,我使用此解决方法。这不是完美的,但效果很好。只是常规搜索:

<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>元素 例如:

  • post1:<p id="test">5.5<p>
  • post2:<p id="test">0.5<p>
  • post3:<p id="test">3.5<p>
  • post4:<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 );
}
?>

1 个答案:

答案 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();
}