wjdennen
  • 0
Новичок

Перенаправление на сообщение на основе параметра GET и настраиваемого поля

  • 0

Я пытаюсь перенаправить на конкретный пост на основе параметра GET. Значение параметра GET — это значение определенного настраиваемого поля.

Например:

http://somedomain.com/wordpress/?fid=xyzzy

У меня это работает, когда сообщение совпадает. Но это не работает должным образом, когда нет совпадения.

    add_filter('query_vars', 'fid_query_vars');
function fid_query_vars($vars) {
    // add fid to the valid list of variables
    $new_vars = array('fid');
    $vars = $new_vars + $vars;
    return $vars;
}

а также

add_action('parse_request', 'fid_parse_request');
function fid_parse_request($wp) {
    // only process requests with "fid"
    if (array_key_exists('fid', $wp->query_vars) && $wp->query_vars['fid'] != '') {
        $args = array('post_type' => 'faculty_profile', 'meta_key' => 'wid', 'meta_value' => $wp->query_vars['fid'] , 'numberposts' => 1);
        $redirect_to_post = get_posts($args);
if (!empty($redirect_to_post ) ) {
        foreach ($redirect_to_post as $p) {
            $link = get_permalink($p->ID);
                        wp_redirect( $link , 301 );
            exit;
        }

        }
else {
    $url = 'http://cnn.com/';
    wp_redirect( $url , 404 );
        }

    }

Я ожидаю, что это перенаправит на cnn.com с ошибкой 404, если совпадений нет. Но вместо этого я получаю домашнюю страницу блога со статусом 200.

Есть идеи? Благодарю.

Share
  1. удалите else после foreach:

    add_action('parse_request', 'fid_parse_request');
    function fid_parse_request($wp) {
        // only process requests with "fid"
        if (array_key_exists('fid', $wp->query_vars) && $wp->query_vars['fid'] != '') {
            $args = array('post_type' => 'faculty_profile', 'meta_key' => 'wid', 'meta_value' => $wp->query_vars['fid'] , 'numberposts' => 1);
            $redirect_to_post = get_posts($args);
            if (!empty($redirect_to_post ) ) {
                foreach ($redirect_to_post as $p) {
                    $link = get_permalink($p->ID);
                    wp_redirect( $link , 301 );
                    exit;
                }
            }
            $url = 'http://cnn.com/';
            wp_redirect( $url , 404 );
            exit;
        }else{
            return $wp;
        }
    }
    
    • 0

Оставить ответ

You must login to add an answer.