web-dev-qa-db-ja.com

カスタム投稿タイプURLでのカスタムフィールドの使用

ショールームのある自動車サイトを開発しています。ショールームごとに、場所に応じた独自のカスタムURLが必要です。場所(市および郡/州)は既に2つのカスタムフィールドとして挿入されています。たとえば、MerseysideのLiverpoolにある「Showroom A」の場合、URLは次のようになります。

http://www.domain.com/location/merseyside/liverpool/showroom-a/

私はカスタムの投稿タイプ「ショールーム」を持っています。それは書き換えルールがfalseに設定されているということです(以前のテストではtrueに設定されていました)。ただし、問題の投稿を作成するときには問題があります。パーマリンクはすべてBARとしてショールームの名前として与えられている(すなわち http://www.domain.com/location/merseyside/liverpool/ )。このURLを無効にすると404エラーが発生し、コードの末尾に「showroom-a」などを追加することもあります( http://www.domain.com/location/merseyside/liverpool/showroom-a/ )も404エラーを引き起こします。これが私のコードです。

function add_rewrite_rules()
{
    // Register custom rewrite rules

    global $wp_rewrite;

    $wp_rewrite->add_rewrite_tag('%showroom%', '([^/]+)', 'showroom=');
    $wp_rewrite->add_rewrite_tag('%post_custom_data%', '([^/]+)', 'post_custom_data=');
    $wp_rewrite->add_permastruct('showroom', 'location/%post_custom_data%', false);

}

function permalinks($permalink, $post, $leavename)
{
    $no_data = 'no-data';
    $post_id = $post->ID;

    if($post->post_type != 'showroom' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) {
        return $permalink;
    }

    $state = sanitize_title_with_dashes(get_post_meta($post_id, 'state', true));
    $city =  sanitize_title_with_dashes(get_post_meta($post_id, 'city', true));
    $data = $state . "/" . $city;

    if (!$data) {
        $data = $no_data;
    }

    $permalink = str_replace('%post_custom_data%', $data, $permalink);

    return $permalink;    
}

add_action('init', 'add_rewrite_rules');
add_filter('post_type_link', 'permalinks', 10, 3);

任意のアイデアや助けがいただければ幸いです:)

5
Rhys Wynne

私はこれをどうにか修正しました。

基本的に私はpermastructをこれに変えました:

$wp_rewrite->add_permastruct('showroom', 'location/%state%/%city%/%showroom%', false);

次に、州と市を2つの変数として捉え、これらの行を使用してパーマリンク構造内で置き換えます。

$permalink = str_replace('%state%', $state, $permalink);
$permalink = str_replace('%city%', $city, $permalink);

投稿から$stateを使って$cityget_post_metaをつかみました。

4
Rhys Wynne