wordpress functions.php 在哪,在functions.php中定义变量并在WordPress中的函数钩子中访问它们...
我想更詳細地了解Wordpress結構.正如我所知,使用全局關鍵字并不是一個好主意.
這是我想要完成的:
Inside functions.php
$affID = '12334'; //defining a variable
add_shortcode('affiliate_link', function() {
$newLink = 'https://example.com?id=' . $affID;
return $newLink;
}
當我運行短代碼時,我只獲得https://example.com?id=部分內容.
當然,我可以傳遞$affID作為參數,但我想設置一個很大的變量列表,我將在不同的函數中使用,我認為通過這么大的列表并不是一個好主意.參數.
解決方法:
這里只是一些想法.真的,這是一個“范圍”問題比什么都重要.
使用
只需使用封閉的使用部分:
$affID = '12334'; //defining a variable
add_shortcode('affiliate_link', function() use ($affID){
$newLink = 'https://example.com?id=' . $affID;
return $newLink;
});
當我看到關閉時,我感到非常高興,這可能是最簡單的方法.
類
另一種方法是使用類實例維護它的狀態(如果你真的想要,你可以做靜態).如果您需要以任何方式使用此功能的類或一般聯盟系統,這是有道理的.然后你就可以解決這個問題了,沒什么大不了的:
class foo{
protected $affID = '12334';
public function affiliate_link_callback(){
$newLink = 'https://example.com?id=' . $this->affID;
return $newLink;
}
}
//to use a class as a call back it works like call_user_func, [obj, method]
add_shortcode('affiliate_link', [new foo, 'affiliate_link_callback']);
全球
最不可取的是使用全局,我個人厭惡并且從不使用它們(但我認為這是一個選項). Globals很糟糕,因為找出(或跟蹤)它們被設置(或修改)的位置可能是一個真正的挑戰,這使得調試它成為一項真正的苦差事.
global $affID;
$affID = '12334'; //defining a variable
add_shortcode('affiliate_link', function(){
global $affID;
$newLink = 'https://example.com?id=' . $affID;
return $newLink;
});
不變
您可以將其定義為常量,只有在代碼的其他部分中使用它時才真正有意義,因為它使維護更容易.在幾個地方你需要這個ID并不是不可能的,并且常量為你提供了一種處理它的全局方式.也可以想象你不會在運行時修改它.它比“全局”更好,因為它不能在運行時更改,因此可以消除跟蹤代碼中的更改位置的問題(因為它不可能).當然,由于這個原因,它有自己的一套局限性.無論如何,它很簡單:
define('AFF_ID','12334'); //defining a variable
add_shortcode('affiliate_link', function(){
global $affID;
$newLink = 'https://example.com?id=' . AFF_ID;
return $newLink;
});
數據庫
最后取決于$affID你可以將它存儲在wordpress DB中.我可能會去用戶meta,因此它鏈接到用戶帳戶.但是,如果它是網站的全球價值,你可以使用選項設置的東西(我不得不看一下,example).不要引用我的代碼,因為我忘記了get_user_meta返回的確切內容,但我知道你應該幾乎總是返回一個值(第三個arg應該是true)
add_shortcode('affiliate_link', function(){
$meta = get_user_meta(get_current_user_id(), 'affiliate_id', true);
$newLink = 'https://example.com?id=' . $meta['affiliate_id'];
return $newLink;
});
當然在最后一個示例中,您必須在某個時刻保存數據,但我相信您可以解決這個問題.
SHORTCODE ATTR
我想您在問題中提到了這一點,但您也可以將其作為短代碼的一部分發送:
add_shortcode('affiliate_link', function($attr){
extract(shortcode_atts( array(
'id' => false,
), $atts, 'affiliate_link' ));
if(!$affiliate_id) return '';
$newLink = 'https://example.com?id='.$id;
return $newLink;
});
我使用了上面的提取,這是一個有趣的PHP函數.我不會推薦它,因為它可以污染你的變量,并且存在一些安全問題.
Import variables from an array into the current symbol table.
Checks each key to see whether it has a valid variable name. It also checks for collisions with existing variables in the symbol table.
Warning
Do not use extract() on untrusted data, like user input (e.g. $_GET, $_FILES).
基本上它需要[‘id’=>’12345’]并創建一個名為$id的變量,其值為12345(在此示例中).你不必使用它,我通常會避免使用它.但我認為在這個例子中使用它會很有趣.
其他想法
另外一個想法是,我將返回整個鏈接而不僅僅是href.所以不要這樣做
Link
你會這樣做:
[affiliate_link]Link[/affiliate_link]
// [affiliate_link id="12345" ]Link[/affiliate_link]
主要原因是在第一種情況下,如果您的短代碼失敗,它將在頁面上留下無用的鏈接.除非他們密切關注實際的鏈接目的地,否則用戶將無法告知此情況.但是,如果您生成整個鏈接并且它失敗,則不會在頁面上放置任何內容.這對于沒有聯盟會員ID的用戶也很有用(如果您使用用戶元示例,并且它與之鏈接).在這種情況下,如果鏈接沒有聯盟ID,則沒有任何內容可以顯示,但如果他們這樣做,鏈接就會顯示.正如我所提到的,如果你把鏈接放在帖子中然后他們沒有它,你仍然會得到一個鏈接,但是有一個空目的地(希望這是有意義的).
如果你這樣做,那么我也會為鏈接文本添加內容.使用上一個例子(上面):
add_shortcode('affiliate_link', function($attr, $content=''){
extract(shortcode_atts( array(
'id' => false,
), $atts, 'affiliate_link' ));
if(!$affiliate_id) return '';
$newLink = ''.$content.'';
return $newLink;
});
//this shortcode
//[affiliate_link id="12345" ]Link[/affiliate_link]
//generates this link
//Link
也就是說,我不知道這是否只能用于鏈接,圖像等等.所以我只是想為了完整性而添加它.
真的,這取決于你如何使用它,ID是如何“靜態”的.它是特定于站點,特定于用戶,是否可以動態更改……?
對不起,這太久了,我剛剛寫了4個wordpress插件,添加了簡單的短代碼…大聲笑.所以我最近才考慮他們.我真的很喜歡短代碼.
希望有所幫助.
標簽:wordpress,php
來源: https://codeday.me/bug/20190622/1261788.html
總結
以上是生活随笔為你收集整理的wordpress functions.php 在哪,在functions.php中定义变量并在WordPress中的函数钩子中访问它们...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GSM BTS Hacking: 利用B
- 下一篇: 如何保护前端JS代码?前端js代码混淆加