访问“CONTENT_SAVE_PRE”中的帖子ID

时间:2014-08-18 作者:Ryan Rampersad

第一次海报,请原谅我的错误。

我正在尝试使用content_save_pre 筛选以获取帖子第一行中的URL并将其保存到自定义元中,还可以将帖子格式设置为链接。大多数情况下,所有这些都很好。

public function save_content($content) {

    // short circuit if special ignore tag is included anywhere in content
    if ( stripos($content, "<!--ignore-->") != false ) {
        return $content;
    }

    $lines = explode("\\n", $content);

    // added href handling so that HTML anchor-links can be handled
    $regex = \'/(?:href="([^\\s"]+))|((?:http|https|ftp|ftps)\\:\\/\\/[a-zA-Z0-9\\-\\.]+\\.[a-zA-Z]{2,4}(?:\\/\\S*)?)/\';

    $match = preg_match($regex, $lines[0], $matches);

    if ( $match ) {
        $url = $matches[0];
        $url = preg_replace(\'/&?utm_(.*?)\\=[^&]+/im\', \'\', $url);

        global $post;
        if ( $post == null || !isset($post->ID) ) {
            // this is part of the problem
            return $content;
        }

        $result = $this->common_save($post->ID, \\LinkedList\\Meta::SOURCE_URL, $url);

        // prevent save fields from overwriting a blank on top of just added value
        add_filter(\'linked_list_save_fields\', function($bool){
            return false;
        });

        set_post_format($post->id, \'link\');

        unset($lines[0]);
        return join("\\n", $lines);

    }

    return $content;

}
我在其他地方为该方法添加了过滤器,但如下所示:

add_filter(\'content_save_pre\', array($this, \'save_content\'), 9, 1);
我遇到的问题是,在使用Android/iOS WordPress应用程序时,我认为它使用的是自托管WordPress的XML-RPC接口global $post 未填充,并且common_save (保存自定义元字段的方法)和set_post_format 没有它不要工作。

还有什么$post->ID 而在XML-RPC的“content\\u save\\u pre”中,这是否可以工作?我一直在使用add_action(\'all\', ...) 要查看XML-RPC保存是否确实有效,并且它肯定正在被调用,它只是无法继续,因为缺少$post 正在填充。

我认为另一种选择是附加一个特殊的自定义元,然后稍后使用一个频繁调度的cron来处理它,但这似乎很复杂,我必须深入研究它。

谢谢

1 个回复
SO网友:Ryan Rampersad

在四处询问并寻找替代方案后,我想出了一个在web前端和基于Android/iOS XML-RPC的应用程序中都能正常工作的解决方案。

这是过滤器。

add_filter(\'wp_insert_post_data\', array($this, \'save_content2\'), 9, 2);
我很确定它在content_save_pre 滤器它允许直接访问post字段(如post内容)和post元数据(如ID)。

public function save_content2($data, $post) {

    $content = $data[\'post_content\'];

    // short circuit if special ignore tag is included anywhere in content
    if ( stripos($content, "<!--ignore-->") != false ) {
        return $data;
    }

    if ( trim($content) == \'\' ) {
        return $data;
    }

    $lines = explode("\\n", $content);

    if ( count($lines) == 0 ) {
        return $data;
    }

    // added href handling so that HTML anchor-links can be handled
    $regex = \'/(?:href="([^\\s"]+))|((?:http|https|ftp|ftps)\\:\\/\\/[a-zA-Z0-9\\-\\.]+\\.[a-zA-Z]{2,4}(?:\\/\\S*)?)/\';

    $match = preg_match($regex, $lines[0], $matches);

    if ( $match ) {
        $url = $matches[0];
        $url = preg_replace(\'/&?utm_(.*?)\\=[^&]+/im\', \'\', $url);

        if ( !isset($post) || !isset($post[\'ID\']) || $post[\'ID\'] == 0 ) {
            return $data;
        }

        $result = $this->common_save($post[\'ID\'], \\LinkedList\\Meta::SOURCE_URL, $url);

        // prevent save fields from overwriting a blank on top of just added value
        add_filter(\'linked_list_save_fields\', function($bool){
            return false;
        });

        set_post_format($post[\'ID\'], \'link\');

        unset($lines[0]);
        $data[\'post_content\'] = join("\\n", $lines);
        return $data;
    }

    return $data;

}
发生了什么变化:参数、现在的数据和一些post元数据(如ID)都可以在这里清晰地使用。返回值已从$content$data 当第一行确实被更改时,结果将保存回$data[\'post_content\'] 字段,并返回整个数组。

虽然这是可行的,但任何其他建议都是绝对受欢迎的。

结束

相关推荐

Search with filters and title

我想搜索custom_post 按标题和ACF字段。所以,我用了WP_Query WordPress函数,但我不能按标题过滤,只能按过滤器过滤。当我提交表单时,我有这样的URL:http://example.com/?s=titre&filter1=condition1&filter2=condition2&filter3=condition3 我的代码:$title = $_GET[\'s\']; $args = array( \'pagenam