2016-04-09 18 views
0

私は私のヘッダーで使用できるショートコードを追加するWordPressに私の最初のプラグインを作っています。ショートコードの代わりに使用するデフォルトを作成する - Wordpressプラグイン

プラグインはWordpressオプションページと統合されています。トップのwp_optionsテーブルの作成やフィールドの削除/更新を含む、すべての管理者関連の作業は問題ありません。

私の問題はカスタムショートコードそのものです(下部にあります)。

私が達成したいのは、get_option( 'bfcsc_logout_link')がadminで設定されていない場合、デフォルト値が返されるべきです。

もちろん、私は「いいやり方」を探していますので、コードもうまくいきます。最後にやりたいと思うようにプラグインが動作するとき、私はそれをさらに進めることを考えています。コードをinitファイルなどに分け、よりプロフェッショナルにする。

以下

は(資産を除く)の完全なコードです:

<?php 
/* 
Plugin Name: Brokenfruit Custom Login Shortcode 
Plugin URI: https://www.brokenfruit.dk/ 
Description: Adds custom login shortcode for Brokenfruit 
Version: 1.0 
Author: Kenn Nielsen 
Author URI: https://www.brokenfruit.dk/ 
License: GPL 
*/ 

// Meaning of abbreviations: 
// bfclsc = brokenfruit custom login shortcode 


/* Register styles and scripts */ 

function bfcsc_enqueue_scripts() { 
    global $wpdb; 
    $screen = get_current_screen(); 

    if ($screen->id != 'settings_page_brokenfruit-custom-shortcodes') 
     return; // exit if incorrect screen id 

     wp_enqueue_style('brokenfruit-shortcodes-styles', plugins_url('/css/styles.css', __FILE__)); 
     wp_enqueue_style('bootstrap', plugins_url('/css/bootstrap.css', __FILE__)); 
     wp_enqueue_script('admin_js_bootstrap_hack', plugins_url('/scripts/bootstrap-hack.js', __FILE__), false, '1.0.0', false); 

} 
add_action('admin_enqueue_scripts', 'bfcsc_enqueue_scripts'); 

/* Runs when plugin is activated */ 
register_activation_hook(__FILE__,'bfcsc_install'); 

/* Runs on plugin deactivation*/ 
register_deactivation_hook(__FILE__, 'bfcsc_remove'); 

function bfcsc_install() { 
    /* Creates new database field */ 
    add_option('bfcsc_logout_link', '', '', 'yes'); 
    add_option('bfcsc_login_link', '', '', 'yes'); 
    add_option('bfcsc_account_link', '', '', 'yes'); 
} 

function bfcsc_remove() { 
    /* Deletes the database field */ 
    delete_option('bfcsc_logout_link'); 
    delete_option('bfcsc_login_link'); 
    delete_option('bfcsc_account_link'); 
} 

if (is_admin()) { 
    function add_bfcsc_option_page() { 
     add_options_page(
      'Brokenfruit Custom Shortcodes', // The text to be displayed in the title tag 
      'Brokenfruit Custom Shortcodes', // The text to be used for the menu 
      'administrator',     // The capability required to display this menu 
      'brokenfruit-custom-shortcodes', // The unique slug name to refer to this menu 
      'bfcsc_html_page');     // The function tooutput the page content 
    } 
    /* Call the html code */ 
    add_action('admin_menu', 'add_bfcsc_option_page'); 
} 

function bfcsc_html_page(){ 
    ?> 
    <form method="post" action="options.php"> 
    <?php wp_nonce_field('update-options'); ?> 
     <div class="bootstrap-wrapper"> 
      <div class="row top-buffer"> 
       <div class="col-md-8"> 
        <div><h1>Brokenfruit Custom Login Shortcode</h1></div> 
        <p>Til brug for shortcode:<br/><span class="shortcode-preview">[custom_login]</span></p> 
        <div class="top-buffer"></div> 
        <h5>Link til log ud:</h5><input placeholder="Eksempel: wp-login.php?action=logout" class="form-control" name="bfcsc_logout_link" type="text" id="bfcsc_logout_link" value="<?php echo get_option('bfcsc_logout_link'); ?>" /></td> 
        <div class="top-buffer"></div> 
        <h5>Link til log ind:</h5><input placeholder="Eksempel: /log-ind/" class="form-control" name="bfcsc_login_link" type="text" id="bfcsc_login_link" value="<?php echo get_option('bfcsc_login_link'); ?>" /></td> 
        <div class="top-buffer"></div> 
        <h5>Link til min konto:</h5><input placeholder="Eksempel: /min-brokenfruit/" class="form-control" name="bfcsc_account_link" type="text" id="bfcsc_account_link" value="<?php echo get_option('bfcsc_account_link'); ?>" /></td> 
        <input type="hidden" name="action" value="update" /> 
        <input type="hidden" name="page_options" value="bfcsc_logout_link,bfcsc_login_link,bfcsc_account_link" /> 
        <input class="btn btn-primary top-buffer" type="submit" value="<?php _e('Save Changes') ?>" /> 
       </div> 
      </div> 
     </div> 
    </form> 
    <?php 
} 

/*---------------------------------------------------*/ 
/*   Custom login shortcode - start   */ 
/*---------------------------------------------------*/ 

function mydefaults(){ 
    if (!get_option('bfcsc_logout_link')){ 
     $logout_link = '/log-ud/'; 
    } else { 
     $logout_link = get_option('bfcsc_logout_link'); 
    } 

    if (!get_option('bfcsc_login_link')){ 
     $login_link = '/log-ind'; 
    } else { 
     $login_link = get_option('bfcsc_login_link'); 
    } 

    if (!get_option('bfcsc_account_link')){ 
     $account_link = '/min-brokenfruit/'; 
    } else { 
     $account_link = get_option('bfcsc_account_link'); 
    } 
} 

function custom_login_shortcode ($atts){ 

    if (is_user_logged_in()) { 

     return '<a href="' . $account_link . '" class="custom_login"><i class="fa icon-user"></i>Mit Brokenfruit</a> | <a href="' . wp_logout_url(home_url()) . '" class="custom_login"><i class="fa icon-logout"></i>Log ud</a>'; 

    } else { 

     return '<a href="/log-ind/" class="custom_login"><i class="fa icon-login"></i>Log ind</a>'; 
    } 
} 
add_shortcode('custom_login', 'custom_login_shortcode'); 

/*---------------------------------------------------*/ 
/*   Custom login shortcode - end    */ 
/*---------------------------------------------------*/ 

?> 

は、事前にあなたのすべてをありがとう! 乾杯ケン

答えて

0

正しいです。あなたの変数はそのメソッドの中で利用できませんでした。 パラメータに関しては、ショートコードapiはそのように動作するものではありません。孤独なパラメータ$ attsは、必要な変数を短いコード(括弧内の部分)から配列として渡すために使用されます。 どのようにショートコードを使用する予定ですか。しかし、あなたはその後、

[custom_login login='different_login' ] 

であなたのパラメータを渡すの$ ATTS配列にショートでそれらを拾うことができます:(グローバルスコープで)

function custom_login_shortcode ($atts){ 
$a = shortcode_atts(array(
     'login' => '/log-ind/', // default value for login 
     'account' => '/min-brokenfruit/', // default value for account 
    ), $atts); 

return $a['login']; // returns 'different_login' 
return $a['account'] // returns '/min-brokenfruit/' 

あなたはまた、定数として、あなたの変数を定義することができますので、彼らあなたのショートコードとすべての方法の中で利用できます: define( 'MY_LOGIN_LINK'、 '/ log-ind'); 次にif(!defined( 'MY_LOGIN_LINK'))を使って、何か作業することがあるかどうかを調べることができます。詳しくは、http://php.net/manual/en/function.define.phpを参照してください。

しかし、この1つの方法でこれらの値が必要な場合は、書き直したコードでこれを少しでも合理化するためにはうまくいくはずです: $ login_link = get_option( 'bfclsc_login_link'、 '/ log-ind /');

0

get_option()デフォルト値のオプションのパラメータを有する:

$no_exists_value = get_option('no_exists_value', 'default_value'); 
var_dump($no_exists_value); /* outputs 'default_value' */ 

https://codex.wordpress.org/Function_Reference/get_option

+0

私はそれを使用することができます。理由を教えてください。私がテストするとき: $ account_link = get_option( 'bfclsc_account_link'、 '/ min-brokenfruit /'); var_dump($ account_link); 文字列(0) ""を出力しますか? –

0

私は解決策を見つけました。

関数mydefaultsの内容を関数custom_login_shortcodeに入れる必要がありました。私の変数は、グローバルな状態で作成され、使用できなかったと思いますか?結局のところ

私は以下のようにショートに変数を渡すことができなかった理由を、私は理解していない:

以下
function custom_login_shortcode ($atts, $logout_link, $login_link, $account_link){ 

作業ショート機能である:

/*---------------------------------------------------*/ 
/*   Custom login shortcode - start   */ 
/*---------------------------------------------------*/ 

/*function mydefaults(){ 
    if (!get_option('bfclsc_logout_link')){ 
     $logout_link = '/log-ud/'; 
    } else { 
     $logout_link = get_option('bfclsc_logout_link'); 
    } 

    if (!get_option('bfclsc_login_link')){ 
     $login_link = '/log-ind'; 
    } else { 
     $login_link = get_option('bfclsc_login_link'); 
    } 

    if (!get_option('bfclsc_account_link')){ 
     $account_link = '/min-brokenfruit/'; 
    } else { 
     $account_link = get_option('bfclsc_account_link'); 
    } 
}*/ 

function custom_login_shortcode ($atts){ 

    if (!get_option('bfclsc_logout_link')){ 
     $logout_link = wp_logout_url(home_url()); //call wordpress logout with home redirect: wp_logout_url(home_url()) 
    } else { 
     $logout_link = get_option('bfclsc_logout_link'); 
    } 

    if (!get_option('bfclsc_login_link')){ 
     $login_link = '/log-ind/'; 
    } else { 
     $login_link = get_option('bfclsc_login_link'); 
    } 

    if (!get_option('bfclsc_account_link')){ 
     $account_link = '/min-brokenfruit/'; 
    } else { 
     $account_link = get_option('bfclsc_account_link'); 
    } 

    if (is_user_logged_in()) { 

     return '<a href="' . $account_link . '" class="custom_login"><i class="fa icon-user"></i>Mit Brokenfruit</a> | <a href="' . $logout_link . '" class="custom_login"><i class="fa icon-logout"></i>Log ud</a>'; 

    } else { 

     return '<a href="' . $login_link . '" class="custom_login"><i class="fa icon-login"></i>Log ind</a>'; 
    } 
} 
add_shortcode('custom_login', 'custom_login_shortcode'); 

/*---------------------------------------------------*/ 
/*   Custom login shortcode - end    */ 
/*---------------------------------------------------*/ 
関連する問題