【问题标题】:Wordpress posts order by "Searched term" and by "post rating"Wordpress 帖子按“搜索词”和“帖子评分”排序
【发布时间】:2019-01-20 11:44:56
【问题描述】:

所以在我的网站侧边栏上,我想放置一个小的过滤器表单,允许按特定搜索词过滤帖子并按评级对其进行排序。

所以对于搜索部分,我使用了这个解决方法。这并不完美,但工作正常。这只是常规搜索:

<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 有疑问。这个想法是,在每篇文章中,我都有不同的数值(raiting)分配给&lt;p&gt; 元素 例如:

  • post1:&lt;p id="test"&gt;5.5&lt;p&gt;
  • post2:&lt;p id="test"&gt;0.5&lt;p&gt;
  • post3:&lt;p id="test"&gt;3.5&lt;p&gt;
  • post4:&lt;p id="test"&gt;1.5&lt;p&gt;

所以我想让用户能够按城镇名称搜索帖子(此功能已经有效)并按 raiting(ASC 或 DSC)排序,并且不仅希望回显帖子标题列表,而且希望以常规方式显示帖子(例如:标题、摘录等)

到目前为止,按 raiting 排序正在搞砸一切,因为我不知道如果我必须按 &lt;p&gt; ID 对其进行排序以及如何连接这 2 个规则:搜索和排序。

我的功能代码:

    <?php
function myfunction( ) {
$args = array(
    'orderby' => jQuery('#test'),
    'order'   => 'DESC',
);
$query = new WP_Query( $args );
}
?>

【问题讨论】:

  • 请在您的问题中包含myfunction() 代码
  • 我更新了问题

标签: wordpress sorting element


【解决方案1】:

显然jQuery('#test') 在 PHP 中不会像那样工作。使用onclick="myfunction()" 调用PHP 函数也是不可能的。 JS在客户端机器上执行,PHP在服务器上执行。这永远行不通。

用 JS 调用 PHP 函数是不可能的,除非你使用 AJAX。

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

【讨论】:

  • 感谢您的解释。关于 JS 部分和 PHP 代码,我还有其他问题。因此,如果我们谈论 Wordpress,那么这个 JS 应该插入到模板标题中,对吗?另外我不会安静地获取 JS ajax 部分“url:”/your/php_script/url” 应该在那里输入什么链接?(我相信应该在functions.php中输入thta php脚本)。所以我应该输入function.php那里?
  • 我稍微调整了答案,以便可以将 PHP 放入 functions.php 我还更改了 AJAX 请求中的 url 参数。您应该将 JavaScript 放在 &lt;body&gt; 标记中,就在 &lt;/body&gt; 之前。
  • 嗨,我试过这个重做的代码。但是由于某种原因,现在甚至搜索部分都不起作用:D也许做错了什么。我将逐步描述我是如何实现代码的,所以也许你可以发现我在哪里搞砸了。首先,我使用 php 小部件在边栏中上传表单代码和 JS。接下来我将 php 代码添加到 function.php。现在由于某种原因,当我按下“查找”按钮时没有任何反应
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多