我的目标是在插件中提取项目中的所有帖子/页面/自定义帖子类型,并创建一个自定义分类法(如果不存在)。每当插件进入if语句内部时,php就会在页面上停止运行。如您在foreach语句中看到的,我回显了帖子类型名称和与其关联的分类法。
如果分类法不存在,我只想在公开可用的帖子类型上创建自定义分类法。
只要我将变量替换为正确的帖子类型,我就能运行functions.php文件中if语句内部的分类法代码。
我也尝试不使用add_action('init','custom_taxo_cpt_taxonomy',1);只需在与add_action('init','custom_taxo_cpt_taxonomy',1);相同的行上通过custom_taxo_cpt_taxonomy()直接调用该函数即可。
echos / var_dumps能够为我提供相关的帖子类型和分类法,而在页面上没有问题,因此我知道在页面上可以很好地做到这一点。
<?php
$args = array(
'public' => true,
);
$output = 'names';
$operator = 'and';
$post_types = get_post_types( $args, $output, $operator );
foreach ( $post_types as $post_type ) {
$cpt_taxo_ar = get_object_taxonomies($post_type);
$cpt_taxo_ar = array_shift($cpt_taxo_ar);
echo '<p>' . $post_type . ' category: ' . $cpt_taxo_ar . '</p>';
if($cpt_taxo_ar != $post_type . '_custom_taxo'){
echo $post_type . '_custom_taxo';
// Register CustomTaxo Tags Taxonomy
function custom_taxo_cpt_taxonomy() {
$labels = array(
'name' => _x( 'CustomTaxo Tags', 'CustomTaxo Tags', 'custom_taxo_domain' ),
'singular_name' => _x( 'CustomTaxo Tag', 'CustomTaxo Tag', 'custom_taxo_domain' ),
'menu_name' => __( 'CustomTaxo Tags', 'custom_taxo_domain' ),
'all_items' => __( 'All Tags', 'custom_taxo_domain' ),
'parent_item' => __( 'Parent Tag', 'custom_taxo_domain' ),
'parent_item_colon' => __( 'Parent Tag:', 'custom_taxo_domain' ),
'new_item_name' => __( 'New Tag Name', 'custom_taxo_domain' ),
'add_new_item' => __( 'Add New Tag', 'custom_taxo_domain' ),
'edit_item' => __( 'Edit Tag', 'custom_taxo_domain' ),
'update_item' => __( 'Update Tag', 'custom_taxo_domain' ),
'view_item' => __( 'View Tag', 'custom_taxo_domain' ),
'separate_items_with_commas' => __( 'Separate items with commas', 'custom_taxo_domain' ),
'add_or_remove_items' => __( 'Add or remove tags', 'custom_taxo_domain' ),
'choose_from_most_used' => __( 'Choose from the most used', 'custom_taxo_domain' ),
'popular_items' => __( 'Popular tags', 'custom_taxo_domain' ),
'search_items' => __( 'Search tags', 'custom_taxo_domain' ),
'not_found' => __( 'Not Found', 'custom_taxo_domain' ),
'no_terms' => __( 'No items', 'custom_taxo_domain' ),
'items_list' => __( 'Tags list', 'custom_taxo_domain' ),
'items_list_navigation' => __( 'Tags list navigation', 'custom_taxo_domain' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
);
register_taxonomy( $post_type . '_custom_taxo', 'page', $args );
} // end taxo function
add_action( 'init', 'custom_taxo_cpt_taxonomy', 1 );
} //end for loop
}
?>
答案 0 :(得分:0)
根据文档:
add_action( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 )`
要解决此问题:"Cannot redeclare custom_taxo_cpt_taxonomy()"
custom_taxo_cpt_taxonomy
必须为callable
,因此在避免名称声明问题的循环中,可以这样使用匿名函数:
$custom_taxo_cpt_taxonomy = function() { ... }
最终匿名不起作用,因为WordPress在call_user_func_array
的{{3}}中使用apply_filters
,而不是$myCallback();
编辑:函数在循环外不匿名
<?php
function custom_taxo_cpt_taxonomy($params) {
register_taxonomy( $params['post_type'] . '_custom_taxo', 'page', $params['args'] );
} // end taxo function
foreach ( $post_types as $post_type ) {
$cpt_taxo_ar = get_object_taxonomies($post_type);
$cpt_taxo_ar = array_shift($cpt_taxo_ar);
echo '<p>' . $post_type . ' category: ' . $cpt_taxo_ar . '</p>';
if($cpt_taxo_ar != $post_type . '_custom_taxo'){
echo $post_type . '_custom_taxo';
// Register CustomTaxo Tags Taxonomy
// function custom_taxo_cpt_taxonomy() { <= issue here
// $custom_taxo_cpt_taxonomy = function() { <= other issue
$labels = array(
'name' => _x( 'CustomTaxo Tags', 'CustomTaxo Tags', 'custom_taxo_domain' ),
'singular_name' => _x( 'CustomTaxo Tag', 'CustomTaxo Tag', 'custom_taxo_domain' ),
'menu_name' => __( 'CustomTaxo Tags', 'custom_taxo_domain' ),
'all_items' => __( 'All Tags', 'custom_taxo_domain' ),
'parent_item' => __( 'Parent Tag', 'custom_taxo_domain' ),
'parent_item_colon' => __( 'Parent Tag:', 'custom_taxo_domain' ),
'new_item_name' => __( 'New Tag Name', 'custom_taxo_domain' ),
'add_new_item' => __( 'Add New Tag', 'custom_taxo_domain' ),
'edit_item' => __( 'Edit Tag', 'custom_taxo_domain' ),
'update_item' => __( 'Update Tag', 'custom_taxo_domain' ),
'view_item' => __( 'View Tag', 'custom_taxo_domain' ),
'separate_items_with_commas' => __( 'Separate items with commas', 'custom_taxo_domain' ),
'add_or_remove_items' => __( 'Add or remove tags', 'custom_taxo_domain' ),
'choose_from_most_used' => __( 'Choose from the most used', 'custom_taxo_domain' ),
'popular_items' => __( 'Popular tags', 'custom_taxo_domain' ),
'search_items' => __( 'Search tags', 'custom_taxo_domain' ),
'not_found' => __( 'Not Found', 'custom_taxo_domain' ),
'no_terms' => __( 'No items', 'custom_taxo_domain' ),
'items_list' => __( 'Tags list', 'custom_taxo_domain' ),
'items_list_navigation' => __( 'Tags list navigation', 'custom_taxo_domain' )
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_admin_column' => true
);
$params = array(
'post_type' => $post_type,
'args' => $args
);
// Pass callable not anonymous function
add_action( 'init', array('custom_taxo_cpt_taxonomy', $params), 1);
} //end for loop
}
?>
编辑:重要
因此下面的代码不起作用:syntax error, unexpected 'add_action' (T_STRING).
<?php
$args = array(
'public' => true
);
$output = 'names';
$operator = 'and';
$post_types = get_post_types( $args, $output, $operator );
foreach ( $post_types as $post_type ) {
$cpt_taxo_ar = get_object_taxonomies($post_type);
$cpt_taxo_ar = array_shift($cpt_taxo_ar);
echo '<p>' . $post_type . ' category: ' . $cpt_taxo_ar . '</p>';
if($cpt_taxo_ar != $post_type . '_custom_taxo'){
echo $post_type . '_custom_taxo';
// Register CustomTaxo Tags Taxonomy
// function custom_taxo_cpt_taxonomy() { <= issue here
// Create anonymous function
$custom_taxo_cpt_taxonomy = function() {
$labels = array(
'name' => _x( 'CustomTaxo Tags', 'CustomTaxo Tags', 'custom_taxo_domain' ),
'singular_name' => _x( 'CustomTaxo Tag', 'CustomTaxo Tag', 'custom_taxo_domain' ),
'menu_name' => __( 'CustomTaxo Tags', 'custom_taxo_domain' ),
'all_items' => __( 'All Tags', 'custom_taxo_domain' ),
'parent_item' => __( 'Parent Tag', 'custom_taxo_domain' ),
'parent_item_colon' => __( 'Parent Tag:', 'custom_taxo_domain' ),
'new_item_name' => __( 'New Tag Name', 'custom_taxo_domain' ),
'add_new_item' => __( 'Add New Tag', 'custom_taxo_domain' ),
'edit_item' => __( 'Edit Tag', 'custom_taxo_domain' ),
'update_item' => __( 'Update Tag', 'custom_taxo_domain' ),
'view_item' => __( 'View Tag', 'custom_taxo_domain' ),
'separate_items_with_commas' => __( 'Separate items with commas', 'custom_taxo_domain' ),
'add_or_remove_items' => __( 'Add or remove tags', 'custom_taxo_domain' ),
'choose_from_most_used' => __( 'Choose from the most used', 'custom_taxo_domain' ),
'popular_items' => __( 'Popular tags', 'custom_taxo_domain' ),
'search_items' => __( 'Search tags', 'custom_taxo_domain' ),
'not_found' => __( 'Not Found', 'custom_taxo_domain' ),
'no_terms' => __( 'No items', 'custom_taxo_domain' ),
'items_list' => __( 'Tags list', 'custom_taxo_domain' ),
'items_list_navigation' => __( 'Tags list navigation', 'custom_taxo_domain' )
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_admin_column' => true
);
register_taxonomy( $post_type . '_custom_taxo', 'page', $args );
} // end taxo function
// Pass callable anonymous function
add_action( 'init', $custom_taxo_cpt_taxonomy, 1 );
} //end for loop
}
?>
数组末尾的 ,
创建一个额外的空字段。