将php函数添加到.js文件中(用于tinyMCE按钮)

时间:2014-06-21 作者:rand_user91

我正在为wp WYSIWYG编辑器创建一个tinyMCE按钮。基本上,当用户单击按钮时,会弹出一个模式表单,他们必须输入几个字段。但是,其中一个字段需要是列出每个帖子类别的列表框,用户将选择一个。其基本语法如下:

{
type: \'listbox\', 
name: \'sds-category\', 
label: \'Category\', 
\'values\': [
    {text: \'Name Of Cat\', value: \'Cat ID\'},
    {text: \'Name Of Cat\', value: \'Cat ID\'},
    {text: \'Name Of Cat\', value: \'Cat ID\'}]}
因此,为了让所有类别都像这样显示,我使用了一个PHPfunction,它将显示{text: \'\', value: \'\'} 每个类别的语法如下:

function write_cat_list($cat){
    $cats = get_categories(\'hide_empty=false&orderby=name&order=ASC&parent=\' . $cat);

    if($cats) :
        foreach ($cats as $cat) :
            $tinyMCE_list[] = "{text: \'".$cat->name."\', value: \'".$cat->term_id."\'}";
            write_cat_list($cat->term_id);
        endforeach;
        echo implode(\',\', $tinyMCE_list);
    endif;
}
现在剩下的就是放置PHP函数write_cat_list(0) 进入我的。js文件,这就是我完全卡住的地方!

我不知道该怎么做,因为我对AJAX非常缺乏经验,有没有一种简单的方法或jquery函数可以让我轻松地将php函数包含到这个js文件中?

1 个回复
最合适的回答,由SO网友:Adam Mo. 整理而成

要使用ajax,您必须钩住此函数,因此您的函数如下所示:

function write_cat_list($cat){
    $cats = get_categories(\'hide_empty=0\');
    if($cats) :
        $tinyMCE_list = array();
        foreach ($cats as $cat) :
            $tinyMCE_list[] = array( \'text\' => $cat->name , \'value\' => $cat->term_id );
            //write_cat_list($cat->term_id);
        endforeach;
        $jscode = json_encode($tinyMCE_list); //to convert from array to opject
        echo $jscode;
    endif;
    die();
}
add_action( \'wp_ajax_cat_list\', \'write_cat_list\' );
和jquery:

jQuery.ajax({
     type: \'post\',
     url: ajaxurl,
     data: {action : \'cat_list\'},
     success: function(data){
        console.log(data);
        // use var data
     }
});
您还可以使用localize 要使用它而不是ajax,请删除die(); 并添加以下内容:

wp_enqueue_script( \'your js file handel\' );
wp_localize_script( \'your js file handel\', \'jscode\',array( \'cat_list\' => $jscode));
以及add_action替换为:

add_action( \'wp_enqueue_scripts\', \'write_cat_list\' );
和jquery:

console.log(jscode.cat_list);
the full code for ajax:

// php
function write_cat_list($cat){
$cats = get_categories(\'hide_empty=0\');
if($cats) :
    $tinyMCE_list = array();
    foreach ($cats as $cat) :
        $tinyMCE_list[] = array( \'text\' => $cat->name , \'value\' => $cat->term_id );
        //write_cat_list($cat->term_id);
    endforeach;
    $jscode = json_encode($tinyMCE_list); //to convert from array to opject
    echo $jscode;
endif;
die();
}
add_action( \'wp_ajax_cat_list\', \'write_cat_list\' );

 // jquery
 jQuery.ajax({
    type: \'post\',
    url: ajaxurl,
    data: {action : \'cat_list\'},
    success: function(data){
        console.log(data);
        // use var data
    }
});
the full code for localize:

    // php
function write_cat_list($cat){
$cats = get_categories(\'hide_empty=0\');
if($cats) :
    $tinyMCE_list = array();
    foreach ($cats as $cat) :
        $tinyMCE_list[] = array( \'text\' => $cat->name , \'value\' => $cat->term_id );
        //write_cat_list($cat->term_id);
    endforeach;
    $jscode = json_encode($tinyMCE_list); //to convert from array to opject
    echo $jscode;
endif;
wp_enqueue_script( \'your js file handel\' );
wp_localize_script( \'your js file handel\', \'jscode\',array( \'cat_list\' => $jscode));
}
add_action( \'wp_enqueue_scripts\', \'write_cat_list\' );
// jquery
console.log(jscode.cat_list); // jscode.cat_list var handel the object

结束

相关推荐

在页面模板中加载jQuery

这是一个很基本的问题,也许这是一个重复的问题,所以请告诉我在这种情况下答案的确切位置。我需要在页面模板中添加一个非常简单的jQuery脚本。我使用的是Openstrap主题,我可以看到jQuery被加载到每个页面上,所以我想我可以正常插入脚本,但不起作用。读了一些帖子后,我发现我必须使用wp_enqueued_script 函数,但是我只需要在页面模板上加载脚本,而不是每个页面。edit成功了!为了满足我的需要,我将其更改为is\\u singular($post\\u type),并按预期工作。然而,j