在函数WordPress中调用Add_action()

时间:2017-10-18 作者:Skatox Nike

我的WordPress挂钩有问题。我想在另一个actions回调中调用一个action,但它似乎不起作用。我想打电话add_meta_tag 仅当页面已保存时才执行操作。这就是我所拥有的:

function saveCustomField($post_id)
{
    add_action( \'wp_head\', \'add_meta_tag\' );
}
add_action( \'save_post\', \'saveCustomField\' );

function add_meta_tag(){
    echo "TEST";
}
我如何才能使上述各项正常工作?

4 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

你认为这完全是错误的。元标记不是保存帖子时添加的东西,而是在查看帖子时添加到输出中的东西。

因此,与其试图在内部勾起行动save_post, 在每次加载页面时都要钩住它,并在钩子内部检查正在查看的帖子上是否存在自定义字段。如果是,则输出标记。

function wpse_283352_add_meta_tag() {
    if ( is_singular() {
        $post_id = get_queried_object_id();
        $meta = get_post_meta( $post_id, \'_my_custom_field\', true );

        if ( $meta ) {
            echo \'<meta name="my_custom_field" content="\' . esc_attr( $meta ) . \'">\';
        }
    }
}
add_action( \'wp_head\', \'wpse_283352_add_meta_tag\' );
该函数只是放在插件文件/函数文件中,而不是放在任何其他挂钩中。

SO网友:Greg36

这个save_post 在数据保存到数据库后(无论何时创建或更新帖子或页面),仅在管理页面上激发挂钩。

这个wp_head 钩子在以下情况下激发wp_head() 函数已运行,但这不会发生在管理页面上。

这行不通。何时何地添加meta标记?

SO网友:Frank P. Walentynowicz

简单的回答是:你不能。

代码很好,但逻辑上有缺陷。wp_head 操作设置得太晚。标头已发送,因此wp_head 永远不会开火!下面的代码将证明两点。首先:save_post 将同时在管理页面和前端启动。第二:很容易防止回调函数中出现无限循环。

在里面functions.php:

function saveCustomField($post_id) {

    // to prevent an infinite loop
    remove_action(\'save_post\', \'saveCustomField\', 10);

    // to prove that function was called
    error_log(\'I am here to add action\');

    add_action(\'wp_head\', \'add_meta_tag\');
}
add_action(\'save_post\', \'saveCustomField\');

function add_meta_tag(){
    error_log(\'TEST\');
    //echo "TEST";
}
在我的页面模板(前端)中:

wp_update_post(array(\'ID\' => 79, \'post_title\' => \'My Current Test\',));
在error\\u日志中:

[19-Oct-2017 02:57:08 UTC] I am here to add action
我的帖子标题已经更新,save_post 被解雇了wp_head 没有。

SO网友:Skatox Nike

我想在启动发布/更新按钮时添加meta标记。我在管理页面上有一个复选框,用于添加/删除元标记。信息方面,它是为插件设计的。

function saveCustomField($post_id)
{
    if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
        return;
}

if (
    !isset($_POST[\'my_custom_nonce\']) ||
    !wp_verify_nonce($_POST[\'my_custom_nonce\'], \'my_custom_nonce_\'.$post_id)
) {
    return;
}

if (!current_user_can(\'edit_post\', $post_id)) {
    return;
}

if (isset($_POST[\'_my_custom_field\'])) {
    update_post_meta($post_id, \'_my_custom_field\', $_POST[\'_my_custom_field\']);
    // here
    // >>>>> add_action(\'wp_head\', \'add_meta_tag\');
} else {
    delete_post_meta($post_id, \'_my_custom_field\');
}
}

add_action( \'save_post\', \'saveCustomField\' );

function add_meta_tag(){
    echo "TEST";
}

结束