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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426509.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java学习(56):接口之间的继承续

//定义一个接口,里面放置多个方法 public interface CountManagement { double count(double n,double m,char tag); double count(double up,double down,double h); double eqAax(double num1,double num2); } //定义一个接口,里面需要实现多个方法 pu…

[UE4]单机游戏改网络游戏,不完全清单

把Actor的复制打开中腰数据的复制打开,且只在服务器修改(比如角色属性血量)需要同步的Actor,不在客户端Spawn客户端的操作,先报告到服务器,服务器再广播到所有客户端某些逻辑只在服务器运行(比如…

java学习(57):内部类

/** 2 * 1.内部类可以直接访问外部类的成员,包括私有 3 * 2.外部类要访问内部类的成员必须创建对象 4 * author jjz 5 * 6 */ public class outer { //外部定义的方法 public void play(){ System.out.println(“我喜欢打篮球”); } public static void main(String…

php对接ai图片处理,php – 使用imagick将.psd和.ai转换为PNG / JPG

我解决了它,并将与世界分享!它会将.ai,.psd,.jpg,.png,.gif转换为缩略图.这是一个需要4个参数的函数:$dir – 要保存的目录.$tmpName – 命名不包括扩展名的文件的名称.$fileType – 自解释.$size – 大或小.function thumbGenerator($dir,$tmpName,$fil…

python初识

1.python的简介   python是一门解释型,弱类型 高级开发编程语言. 2.python安装 (1)python3.x  https://www.python.org/downloads/ (2)pycharm  https://www.jetbrains.com/pycharm/ 3、编写第一个python程序 符号:英文 编码方式:“utf-8…

java学习(58):私有内部类后访问

私有化外部方法访问 public class outer { //外部定义的方法 private class student { public void play() { System.out.println(“只有学生才会喜欢打篮球”); } } public void teacher() { student stu new student(); stu.play(); } public static void main(String[] arg…

java学习(59):static修饰内部类

class Outer { private int num 10; private static int num2 100; //内部类用静态修饰是因为内部类可以看出是外部类的成员public static class Inner {public void show() {//System.out.println(num);System.out.println(num2);}public static void show2() {//System.out…

Python_自定义关键字的使用

1.在Python中新建一个套件MOSAPP(一般为APP名称):New Suite→Directory 2.在套件下新建个资源文件My:New Resource:My 3.在My资源文件库下新建个关键字Mytest:New User KeyWord:Mytest 4.在01smoke下新建一…

php http请求xml数据,使用php从HTTP POST请求中检索XML

我检查了类似的问题但没有解决我面临的问题.我正在构建一个Web服务,我想从HTTP POST请求中检索XML数据,操纵数据并返回响应.编写脚本时应考虑以下信息:The communication mode is HTTP POST (not SOAP)The content type is text/xml.The POST request will contain …

java学习(60):java最终类(了解)

最终类 使用关键字 final 对类进行修饰. [访问控制符] final class 类名 { 类体} 例如: public final class MyClass{ ... } 说明: final 不能当做父类, 不能被继承,不能有子类 , 只能被实例化对象 . 如果认为封装类中的某些数据(成员变量) 或者 某些方法(成员方法) 不能…

Lesson 028 —— python 模块

Lesson 028 —— python 模块 在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。 为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚…

java 复杂报表,Java报表比较之中国式报表(复杂报表)篇

Java报表工具,首先可以分成两大类:纯Java报表工具,和支持Java的报表工具。支持Java的报表工具我们所说的”支持”Java的报表工具.其实就是非Java的报表工具,但是可以在Java程序中调用.这样的产品很多,总的讲…

java学习(61):适配器

定义一个动物的抽象类 public abstract class Animal { //定义一个抽象类的方法 public abstract void run(); //定义一个抽象类的构造器 public Animal(){ System.out.println(“抽象类的构造器”); } } 定义一个哺乳动物的抽象类 package com.zx; abstract class Mammal ext…

9个图片滑块动画

链接:https://www.html5tricks.com/9-jquery-image-slider.html 实例: 该实例下载链接:https://www.html5tricks.com/jquery-drag-image-slider.html 转载于:https://www.cnblogs.com/wanlibingfeng/p/9915376.html

php 02d,邻苯二甲酸二苯酯(DPhP)

邻苯二甲酸二苯酯(DPhP) CAS:84-62-8 规格:5G 货号:N-11798-5G邻苯二甲酸二苯酯(DPhP) CAS:84-62-8规格:10G 货号:N-11798-10G邻苯二甲酸二苯酯(DPhP)相关物质订购信息型号 …

java学习(62):java抽象类

定义一个抽象的食物方法 package com.zx; //定义一个食物的抽象方法 public abstract class Food { public abstract void taste(); } 定义食物面条 package com.zx; public class Flour extends Food{ public void taste() { System.out.println(“我可以做面条”); } } 定义食…

java学习(63):普通内部类

定义一个普通内部类 package com.zx; public class NotebookComputer01{ //定义一个非私有化的变量 public int num; public class CPU{ //类型 public String number; //运行速度 public long speed; public String counter(int num){ return Integer.toBinaryString(num); } …

php与其它语言组合开发,PHP相对于其它语言有哪些魅力?

PHP起源于自由软件,自由软件就是开放源代码软件,使用PHP进行web应用程序的开发具有以下优势。1、安全性高PHP是开源软件,每个人都可以看到所有的PHP源代码,程序代码与Apache编译在一起的方式也可以让它具有灵活的安全设定。PHP具有…

2018.11.6

1,了解HTML5 设计目的是为了在移动设备上支持多媒体相对之前的版本有哪些改进 认识语义元素和非语义元素 2,css:层叠式样式表是用来定义如何显示HTML元素的 写法:有 内联 内嵌 外部引用的方式 格式:样式名…

java学习(64):类访问私有内部内部类方法

package com.zx; public class NotebookComputer01{ //定义一个非私有化的变量 private int num; private CPU cpu; //方法呗私有化 private class CPU{//类型private String number;//运行速度private long speed;public void counter(int num){System.out.println(Integer.t…