未知自定义帖子类型的添加操作(_A)

时间:2015-02-14 作者:LPH

如果已知自定义post类型(例如“reference”),则add\\u操作为

add_action( \'publish_reference\' , \'run_new_post_code\' );
太好了。但是对于未知的自定义帖子类型,正确的代码是什么?我试图添加一个文本框,以便最终用户可以添加custom\\u post\\u类型。然后调用$custom_post_type =. wp\\U die显示$custom\\u post\\u类型已正确返回。但是publish_{$custom_post_type} 必须以错误的方式启动add\\u操作,因为此操作失败。

$custom_post_type = $options[\'custom_post_type\'];
add_action( \'publish_{$custom_post_type}\' , \'run_new_post_code\' );
编写add\\u操作以使其适用于任何客户的custom\\u post\\u类型的好方法是什么?

更新:这可以工作,但仍然只适用于一种自定义帖子类型。多个自定义帖子类型如何?

$custom_post_type = $options[\'custom_post_type\'];
add_action( \'publish_\' . $custom_post_type , \'run_new_post_code\' );

2 个回复
SO网友:Privateer

第一个不起作用,因为要使用该格式,需要双引号。

add_action( "publish_{$custom_post_type}" , \'run_new_post_code\' );
这样可以正确处理包装的变量名。

要为所有自定义帖子类型做一些事情,您可能只需要获取自定义帖子类型的列表并循环浏览它们,为每个类型添加一个操作。

如果你只想为其中一些人做这件事,那么你必须让用户能够在某处设置选项,列出要为哪些类型做每件事。

<?php
$post_type_names = get_post_types( array(), \'names\' );
foreach ( $post_type_names as $name ) {
   add_action( "publish_{$name}", \'run_new_post_code\' );
}
?>
以上内容将循环浏览找到的每个职位类型。

看见get_post_types 获取参数列表以及如何使用它们。

SO网友:birgire

您可能需要使用transition_post_status 改为挂钩,例如:

add_action( \'transition_post_status\', 
    function( $new_status, $old_status, $post )
    {
        if(     \'cpt\' === $post->post_type 
            &&  \'publish\' === $new_status
            &&  \'publish\' !== $old_status
        )
        {
            // do stuff
        } 
    }
, 10, 3 );
为了更好地控制帖子状态的变化,并轻松检查帖子类型。

要对所有自定义帖子类型执行它(如回答中所要求的),我们可以检查_built-in post类型对象的属性:

add_action( \'transition_post_status\', 
    function( $new_status, $old_status, $post ) {

        // get post type object
        $post_type_object = get_post_type_object( $post->post_type );

        // Check is the post type object is not built-in (that is, it is a custom post type)
        // and check that the transition is from "some status" to "publish"
        if(     ! $post_type_object->_builtin
            &&  \'publish\' === $new_status
            &&  \'publish\' !== $old_status
        ) {
            // do stuff
        } 
    }
, 10, 3 );

结束

相关推荐

Hooks for Links Box

Possible Duplicate:Getting archive pages in WP's AJAX internal link finder? 新的有挂钩吗internal links box 创建于WP 3.1? 我正在尝试在插件中修改它。