2017-08-01 2 views
0

Also ich versuche, jQuery zu verwenden, um Anforderungen an eine REST-API (Wordpress) zu stellen. Aufgrund dieses zu kodieren:Wordpress REST API URL Decodierung

http://localhost:8040/?rest_route=/wp/v2/posts&filter[meta_key]=holiday_type&filter[meta_value]=villa 

wird daraus:

http://localhost:8040/?rest_route=%2Fwp%2Fv2%2Fposts&filter%5Bmeta_key%5D=holiday_type&filter%5Bmeta_value%5D=villa& 

resultierende somit in falschen Ergebnissen. Gibt es eine Einstellung, die ich ändern kann oder die ich überschreiben kann? Wenn ja, welchen Controller sollte ich erweitern? Die Dokumentation ist nicht erschöpfend

bearbeiten

Dies ist, wie ich die Anfrage vorbereiten:

$.get('/', { 
     'rest_route': '/wp/v2/posts', 
     'filter[meta_key]': 'holiday_type', 
     'filter[meta_value]': holidayType 
    }).done(function(data) { 
     // do processing 
    }) 
+0

Was ist der Fehler, den Sie bekommen? Wenn es einen Fehler gibt, liegt es wahrscheinlich in der ersten Anfrage. Funktioniert es ohne Codierung? – Unex

+0

Zeigen Sie, wie Sie die Anforderungen erstellen wie in [mcve] – charlietfl

+0

@Unex Ich bekomme keinen Fehler, nur alle Ergebnisse, weil die Filter und verarbeitet werden. Es funktioniert ohne die Codierung. jQuery codiert alle Anfragen und auch den Browser – Michael

Antwort

0

ich die Lösung gefunden. Wordpress entschlüsselt URLs bereits automatisch. Ich entdeckte jedoch, dass die Filterabfrage var ab WordPress 4.7 mit der Implementierung von WP API v2 entfernt wurde. Also ich brauche nur diesen Code-Schnipsel zu meiner functions.php Datei und es hat funktioniert.

add_filter('rest_post_query', function ($args, $request) { 
    if (empty($request['filter']) || ! is_array($request['filter'])) { 
     return $args; 
    } 

    $filter = $request['filter']; 

    if (isset($filter['meta_key']) && isset($filter['meta_value'])) { 
     $args['meta_key'] = $filter['meta_key']; 
     $args['meta_value'] = $filter['meta_value']; 
    } 

    if (isset($filter['posts_per_page']) && ((int) $filter['posts_per_page'] >= 1 && (int) $filter['posts_per_page'] <= 100)) { 
     $args['posts_per_page'] = $filter['posts_per_page']; 
    } 
    global $wp; 
    $vars = apply_filters('query_vars', $wp->public_query_vars); 
    foreach ($vars as $var) { 
     if (isset($filter[ $var ])) { 
      $args[ $var ] = $filter[ $var ]; 
     } 
    } 

    return $args; 
}, 10, 2);