将_TITLE筛选器应用于帖子标题和后端自动社交共享插件,但不应用于导航菜单

时间:2016-02-28 作者:Andre Bulatov

挑战我一直在努力写作a filter that applies (prepends a string) to (a) post titles of a certain post type and (b) to that same post type WordPress admin backend for use by an auto social sharing plugin.

我已经非常接近了。我做到了:1。仅对自定义post\\u类型的post titles2进行前置。前置到custom\\u post type标题和所有导航菜单项3。所有标题的前置(帖子、页面、导航菜单和后端自动共享插件)

最后,第三次尝试让我充满希望,但不管我使用的函数、条件语句或组合,我都无法获得custom_post title AND backend social sharing plugin, but not nav menu items.

我的代码-我尝试了不同的条件,如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 个回复
最合适的回答,由SO网友:Andre Bulatov 整理而成

解决方案

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 供后端社交共享插件使用):

相关推荐

Apply filters on date format

我使用Wordpress主题,其中格式日期和时间直接编码为两种格式:<?php the_time(\'d M\'); ?> <?php the_time(\'H:i\'); ?> 我想要的:显示wordpress选项中定义的日期和时间我不想在子主题中创建修改过的模板,我更喜欢使用函数。我已经在函数中添加了php。php此代码有效:add_filter( \'the_time\', \'changer_date_format\', 10, 1 ); //o