我正在为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'}]}
为了让所有类别都像这样显示我使用了一个php函数它会为每个类别吐出{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文件?
由于您正在递归地收集类别,因此在foreach循环中打印值,或者将值收集到数组中(就像您正在做的那样)并进一步传递。下面是一个例子:
function list_categories( $cat_id, &$output = array() )
{
$categories = get_categories( 'hide_empty=0&orderby=name&order=ASC&parent=' . $cat_id );
foreach( $categories as $cat ) {
$output[] = array( 'text' => $cat->name, 'value' => $cat->term_id );
list_categories( $cat->term_id, $output );
}
return $output;
}
$list = list_categories(0); // to get an array of categories
有几种方法可以将输出包含到.js文件中。如果脚本是用.php文件生成的,那么使用:
'values': <?php echo json_encode( list_categories(0) ); ?>
如果是外部文件,一个选项是本地化脚本:
wp_localize_script( 'some_handle', 'mce_options', array( 'categories' => json_encode( list_categories(0) ) ) );
// later in .js file
'values': mce_options.categories
另一个选项是直接在admin_head中打印值:
add_action( 'admin_enqueue_scripts', 'mce_admin_scripts' );
function mce_admin_scripts( $hook ) {
if ( $hook == 'post.php' || $hook == 'post-new.php' ) {
add_action( "admin_head-$hook", 'mce_admin_head' );
}
}
function mce_admin_head() {
echo '<script type="text/javascript">var mce_options=' . json_encode( array( 'categories' => list_categories(0) ) ) . '; </script>';
}