Wordpress порядок сообщений по "искомому термину" и "пост рейтинг" - PullRequest
0 голосов
/ 20 января 2019

Поэтому на боковой панели моего сайта я хочу разместить небольшую форму фильтра, которая позволит фильтровать сообщения по определенным условиям поиска и сортировать их по рейтингу.

Так что для поисковой части я использую этот обходной путь.Что не идеально, но работает отлично.Это просто обычный поиск:

<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> идентификаторам и как соединить эти 2 правила: поиск и сортировка.

Код моей функции:

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

1 Ответ

0 голосов
/ 20 января 2019

Очевидно, что jQuery('#test') не будет так работать в PHP. Также использование onclick="myfunction()" для вызова функции PHP невозможно. JS выполняется на клиентском компьютере, а PHP - на сервере. Это никогда не сработает.

Вызов функции PHP с JS невозможен, если вы не используете 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();
}
...