web-dev-qa-db-ja.com

WordPressを使用してURLに追加の変数を渡す方法

URLの追加変数をWordPressインストールに渡そうとすると問題が発生します。

たとえば、/news?c=123

何らかの理由で、Webサイトのルートwww.example.com?c=123でのみ機能しますが、URLにwww.example.com/news?c=123の情報が含まれている場合は機能しません。テーマディレクトリのfunctions.phpファイルに次のコードがあります。

if (isset($_GET['c'])) 
{
  setcookie("cCookie", $_GET['c']); 
}

if (isset($_SERVER['HTTP_REFERER']))
{
  setcookie("rCookie", $_SERVER['HTTP_REFERER']);
}

何か案は?

65
Chuck D

この問題に取り組むための解決策はほとんどありません。必要に応じて、最初にプラグインを選択できます:

または、手動でコーディングして、この投稿をチェックしてください:

また、チェックアウト:

31
Sarfraz

function.phpに次のコードを追加します

add_filter( 'query_vars', 'addnew_query_vars', 10, 1 );
function addnew_query_vars($vars)
{   
    $vars[] = 'var1'; // var1 is the name of variable you want to add       
    return $vars;
}

その後、$ _ GET ['var1']を使用できます。

15
shankhan

これは頻繁にアクセスされる投稿なので、誰でも役立つ場合に備えてソリューションを投稿することを考えました。 WordPressでは、クエリ変数の使用とともにパーマリンクもこのように変更できます

www.example.com?c=123 to www.example.com/c/123

そのためには、functions.phpまたはプラグインベースファイルにこれらのコード行を追加する必要があります。

Fromshankhan's anwer

add_filter( 'query_vars', 'addnew_query_vars', 10, 1 );
function addnew_query_vars($vars)
{   
    $vars[] = 'c'; // c is the name of variable you want to add       
    return $vars;
}

さらに、これは、カスタム書き換えルールを追加するために省略されています。

function custom_rewrite_basic() 
{
    add_rewrite_rule('^c/([0-9]+)/?', '?c=$1', 'top');
}
add_action('init', 'custom_rewrite_basic');

特定のページに書き換えルールを追加する必要がある場合、そのページスラッグを使用してその特定のページの書き換えルールを作成できます。 OPが尋ねた質問のように

www.example.com/news?c=123 to www.example.com/news/123

前の関数に少し変更を加えることで、希望する動作に変更できます。

function custom_rewrite_basic() 
{
    add_rewrite_rule('^news/([0-9]+)/?', 'news?c=$1', 'top');
}
add_action('init', 'custom_rewrite_basic');

それが誰かに役立つことを願っています。

9
shazyriver
<?php
$edit_post = add_query_arg('c', '123', 'news' );

?>

<a href="<?php echo $edit_post; ?>">Go to New page</a>

「ニュース」の代わりに任意のページを追加できます。

3
user3777827

実行される可能性のある問題の1つは、登録されたquery_varがホームURLに存在する場合にis_home()がtrueを返すことです。たとえば、http://example.comがブログの代わりに静的ページを表示する場合、http://example.com/?c=123はブログを返します。

https://core.trac.wordpress.org/ticket/2514 および https://wordpress.org/support/topic/adding-query-var-makes-front-を参照page-missing / これに関する詳細情報。

できることは(クエリに影響を与えようとしていない場合)add_rewrite_endpoint()を使用することです。書き換えルールに影響するため、initアクション中に実行する必要があります。例えば。

add_action( 'init', 'add_custom_setcookie_rewrite_endpoints' );

function add_custom_setcookie_rewrite_endpoints() {
    //add ?c=123 endpoint with
    //EP_ALL so endpoint is present across all places
    //no effect on the query vars
    add_rewrite_endpoint( 'c', EP_ALL, $query_vars = false );
}

これにより、URLに$_GET['c']などの詳細情報が含まれている場合にwww.example.com/news?c=123にアクセスできるようになります。

これを追加/変更した後は、必ず書き換えルールをフラッシュしてください。

2
niall.campbell

これが機能する唯一の方法でした

add_action('init','add_query_args');
function add_query_args()
{ 
    add_query_arg( 'var1', 'val1' );
}

http://codex.wordpress.org/Function_Reference/add_query_arg

1
brenjt

to RLを投稿するパラメーターを追加(パーマリンクへ)、私はこれを使用します:

add_filter( 'post_type_link', 'append_query_string', 10, 2 );
function append_query_string( $url, $post ) 
{
    return add_query_arg('my_pid',$post->ID, $url);
}

出力:

http://yoursite.com/pagename?my_pid=12345678

1
T.Todua