2016-04-09 1 views
0

Я делаю свой первый плагин в Wordpress, который добавляет короткий код, который я могу использовать в своем заголовке.Создайте значения по умолчанию для использования в коротких замыканиях - Wordpress plugin

Плагин интегрируется с страницей параметров 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

Correct. Ваша переменная не была доступна внутри этого метода. Что касается параметров, то shortcode api не должен работать так. Одиночный параметр $ atts используется для передачи необходимых вам переменных из короткого кода (часть внутри скобки) в виде массива. Я не уверен, как вы планируете использовать короткий код. Но вы могли бы передать свои параметры с

[custom_login login='different_login' ] 

затем забрать их в шорткоде в массиве $ АЦА:

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.

Но если вам нужны только эти значения в этом методе, это будет работать в вашем переписанном коде, чтобы упростить его: $ 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    */ 
/*---------------------------------------------------*/