应用the_title过滤器来发布标题和后端自动社交分享插件,但不是导航菜单

时间:2016-02-28 19:09:13

标签: wordpress plugins filter action

挑战

我一直在尝试编写应用(前置字符串)的过滤器(a)发布某个帖子类型的标题,(b)写入相同的帖子类型WordPress管理员后端以供汽车社交使用分享插件。

我已经非常接近了。我已经实现了: 1.仅预设自定义post_type帖子标题 2.前置于custom_post类型标题和所有导航菜单项 3.前置所有标题(帖子,页面,导航菜单和后端自动共享插件)

最后的第三次尝试让我非常满怀希望,但是,无论我使用的功能,条件陈述或组合,我都无法获得 custom_post标题和后端社交分享插件,但< em> not 导航菜单项

我的代码 - 我尝试过的

我尝试了不同的条件,例如is_admin()!is_nav_menu以及所有导航菜单ID。我还尝试将帖子的ID与菜单的ID进行比较。最后,我还尝试将过滤器仅添加到loop_start,如果与其他语句结合使用,这似乎很有希望。我会清理我的代码以供审核,但我现在就这样离开,希望看看我尝试了什么,也许我在这些方法中出错了。

// , $id = NULL
function append_album_review_to_title( $title ) {
    global $post;
    global $dont_apply_title_filter;
    $text = 'Album Review: ';
    $prepended_title = $text . $title;
/*
    $nav_menus_obj = wp_get_nav_menus();
    $nav_menu_ids = '';
    foreach( $nav_menus_obj as $nav_menu ) {
        $nav_menu_ids .= $nav_menu->term_id . ',';
    }
    rtrim($nav_menu_ids, ',');
*/
//  if ( get_post_type( $post->ID ) == 'album_review' && in_the_loop() ){
//  if ( get_post_type( $post->ID ) == 'album_review' && $id == get_the_ID() ){
//  if ( !is_nav_menu( '32057,32058,35135,32054,32056' ) ) {
//  if ( get_post_type( $post->ID ) == 'album_review' && is_nav_menu( $id ) ) {
    if ( get_post_type( $post->ID ) == 'album_review' && !$dont_apply_title_filter ) {
        //print_r( $nav_menu_ids );
        //print_r( is_nav_menu( $nav_menu_ids ) );
        return $prepended_title;
/*
    } elseif ( get_post_type( $post->ID ) == 'album_review'  ) {
        return $title;
*/
    } else {
        return $title;
    };
}
add_filter('the_title', 'append_album_review_to_title');
//add_action('save_post', 'custom_post_type_title', 100);
/*
function set_custom_title() {
    add_filter( 'the_title', 'append_album_review_to_title', 10, 2 );
}
add_action( 'loop_start', 'set_custom_title' );
*/

1 个答案:

答案 0 :(得分:0)

解决方案

function append_album_review_to_title( $title, $id = NULL ) {
    if ($id) {
        if ( get_post_type( $id ) == 'album_review' ){
            return 'Album Review: ' . $title;
        } else {
            return $title;
        }
    } else {
        return 'Album Review: ' . $title;
    };
}
add_filter('the_title', 'append_album_review_to_title', 10, 2);

解释

首先尝试这个:

function append_album_review_to_title( $title, $id ) {
    if ( get_post_type( $id ) == 'album_review' ){
        return 'Album Review: ' . $title;
    } else {
        return $title;
    }
}
add_filter('the_title', 'append_album_review_to_title', 10, 2);

我注意到在后端,我用来自动分享帖子的社交分享插件会返回missing parameter 2Notice: Trying to get property of non-object...等警告,因此我发现与前端不同(导航菜单和循环),在后端,显然$id没有被传递给the_title,因此我可以将其用作条件。

为了我的目的,检查$id会告诉我,如果是true,我们就在前端,如果是false,那么我们会在后端查看

此代码完成了我的需要(即,在循环中修改帖子标题,不修改导航菜单项,并修改the_title以供后端社交共享插件使用):