创建默认值以在短代码中的 return 中使用 - Wordpress 插件
Create defaults to use in return in shortcode - Wordpress plugin
我正在制作我的第一个 Wordpress 插件,它添加了一个简码,我可以在 header.
中使用
该插件与 Wordpress 选项页面集成。所有与管理相关的工作都很好,包括编写 top wp_options table and/or delete/update 字段。
我的问题出在自定义简码本身(底部)。
我想实现的是,当admin中没有设置get_option('bfcsc_logout_link')时,应该返回一个默认值。
当然,我正在寻找 'nice way',所以我的代码看起来也不错 :) 当插件最终按我想要的方式工作时,我正在考虑更进一步进一步将代码分离到初始化文件等,使其更专业。
完整代码如下(不包括资产):
<?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 */
/*---------------------------------------------------*/
?>
提前谢谢大家!
凯恩干杯
get_option() 有一个默认值的可选参数:
$no_exists_value = get_option( 'no_exists_value', 'default_value' );
var_dump( $no_exists_value ); /* outputs 'default_value' */
我找到了解决办法。
我需要将函数 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 */
/*---------------------------------------------------*/
正确。您的变量在该方法中不可用。
至于参数,简码 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/'
您还可以将变量定义为常量(具有全局范围),以便它们在您的短代码和所有方法中可用:
定义('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/');
我正在制作我的第一个 Wordpress 插件,它添加了一个简码,我可以在 header.
中使用该插件与 Wordpress 选项页面集成。所有与管理相关的工作都很好,包括编写 top wp_options table and/or delete/update 字段。
我的问题出在自定义简码本身(底部)。
我想实现的是,当admin中没有设置get_option('bfcsc_logout_link')时,应该返回一个默认值。
当然,我正在寻找 'nice way',所以我的代码看起来也不错 :) 当插件最终按我想要的方式工作时,我正在考虑更进一步进一步将代码分离到初始化文件等,使其更专业。
完整代码如下(不包括资产):
<?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 */
/*---------------------------------------------------*/
?>
提前谢谢大家! 凯恩干杯
get_option() 有一个默认值的可选参数:
$no_exists_value = get_option( 'no_exists_value', 'default_value' );
var_dump( $no_exists_value ); /* outputs 'default_value' */
我找到了解决办法。
我需要将函数 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 */
/*---------------------------------------------------*/
正确。您的变量在该方法中不可用。 至于参数,简码 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/'
您还可以将变量定义为常量(具有全局范围),以便它们在您的短代码和所有方法中可用: 定义('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/');