web-dev-qa-db-ja.com

Shortcode属性を別の関数で使う方法

私はWordPressサイトで作業していて、バックエンド(または複数のスライダー)にスライダーを登録し、そしてそれをいくつかの簡単なphpスニペットでフロントエンドに表示するスライダープラグインをインストールしました。私はショートコードで同じことができるようにプラグインを修正しようとしています。ショートコードがプラグインをバックエンドに登録し、フロントエンドに表示することができるようにしたいです。[responsive_gallery slider_name="slider"]

私はその部分を下に持っています、そして私はショートコードを使ってスライダーを表示することさえできます。登録時にバックエンドで問題があります。一番下のコードは機能しますが、shortcode attributes配列($ slider_name)に格納されている値を取得してset_flexslider_hg_rotators()関数で使用する方法があることを望みました。私は何時間も努力してきましたが、うまくいくものがありません。これを最善にする方法について何か提案はありますか?

これがプラグインコードです。

バックエンド登録:

function set_flexslider_hg_rotators()
{
  $rotators = array();
  $rotators['homepage'] = array( 'size' => 'homepage-rotator' );
  return $rotators;
}
add_filter('flexslider_hg_rotators', 'set_flexslider_hg_rotators');

フロントエンドディスプレイ:

<?php if(function_exists('show_flexslider_rotator')) echo show_flexslider_rotator( 'homepage' ); ?>

これが私の作業コードです。

function responsive_gallery_shortcode($atts, $content=null) {
    extract(shortcode_atts( array('slider_name' => 'product_page') , $atts));

    if(function_exists('show_flexslider_rotator')) echo show_flexslider_rotator( $slider_name );
    add_image_size( $slider_name , '550', '250', true );
}
add_shortcode('responsive_gallery', 'responsive_gallery_shortcode');        

function set_flexslider_hg_rotators() {
    $rotators = array();
    $rotators[ 'product_page' ] = array( 'size' => 'product_page' );
    return $rotators;
}   
add_filter('flexslider_hg_rotators', 'set_flexslider_hg_rotators');

私はset_flexslider_hg_rotators関数で$ slider_nameを使用できるようにしたいのですが、それを行うための最善の方法が何であるかがわからない(またはそれが可能な場合でも)。次のようにします。

function set_flexslider_hg_rotators()
{
  $rotators = array();
  $rotators[$slider_name] = array( 'size' => $slider_name );
  return $rotators;
}
add_filter('flexslider_hg_rotators', 'set_flexslider_hg_rotators');

$ slider_nameはグローバルではないので、この関数からは何も返されません(予想どおり)。似たようなことができる方法はありますか?

2

ショートコード関数内で基本的に作成されている変数を使用できるようにするには、それをどこかに格納してから値を取得する必要があります。 Wordpressはグローバル変数を内部的に使って値を保存したり運んだりしますが、同じようにすることはお勧めしません。

Options API についてはこちら を読んでください。とてもシンプルな機能.

だから、次のようなものがあなたのショートコード関数内でうまくいくでしょう:

update_option('_unique_slider_name', $slider_name);

それからあなたのフィルタ関数の中(あるいはどこでも)あなたはこのような値にアクセスすることができます:

$slider_name = get_option('_unique_slider_name');

値はキャッシュされるので、値にアクセスしようとしたときにデータベースヒットが繰り返されることを心配しないでください。

1