【问题标题】:Wordpress add_filter inside function not worksWordpress add_filter 内部函数不起作用
【发布时间】:2015-08-13 20:02:10
【问题描述】:

我会尽力解释我的情况。

我想更改“自定义帖子”的“存档页面”上的wpseo_title、wpseo_metakey、wpseo_metadesc、wpseo_opengraph_type、wpseo_opengraph_image、wpseo_titlewpseo_opengraph_image_size

因为 yoast 插件没有在“存档”帖子中翻译元标记。我需要全部翻译

我有这个代码:

function get_archive_seo() {

include 'seo_archive.php';

$tipoSel = get_post_type(get_the_ID());

if(is_post_type_archive( $tipoSel )){

    foreach ($traduccionesArchive as $keyTipo => $tipo){
        foreach ($tipo as $keyMeta => $palabra){
            if($keyMeta == 'opengraph_type' || $keyMeta == 'opengraph_image_size') continue;
            icl_register_string ('my-theme', $keyTipo." - ".$keyMeta, $palabra);
        }
    }

    foreach ($traduccionesArchive[$tipoSel] as $key => $palabra){
        add_filter( 'wpseo_'.$key, function($nombre) use ( $palabra, $tipoSel, $key ) {
            if($key == 'opengraph_type' || $key == 'opengraph_image_size') return $palabra;
            return icl_t('my-theme', $tipoSel." - ".$key, $palabra);
        });
    }

}

}

add_filter( 'wp_head', 'get_archive_seo');

这是“seo_archive.php”

$traduccionesArchive['hoteles']['title'] = 'Hotel, Vacaciones en Andalucia';
$traduccionesArchive['hoteles']['metakey'] = 'palabra1, palabra2, palabra3';
$traduccionesArchive['hoteles']['metadesc'] = 'Mapa de Hotel en Andalucia, Costa del Sol, Costa de la Luz y Sierra de Grazalema. El lugar ideal para tus vacaciones.';
$traduccionesArchive['hoteles']['opengraph_type'] = 'object';
$traduccionesArchive['hoteles']['opengraph_image'] = 'http://www.hotel.com/img/logo.png';
$traduccionesArchive['hoteles']['opengraph_image_size'] = 100;

$traduccionesArchive['apartamentos']['title'] = 'Apartamentos de vacaciones Costa del Sol ';
$traduccionesArchive['apartamentos']['metakey'] = 'palabra1, palabra2, palabra3';
$traduccionesArchive['apartamentos']['metadesc'] = 'Mapa de localizacion de los Apartamentos Vacacionales de Hotel. Disfruta de tus vacaciones en familia en la Costa del Sol.';
$traduccionesArchive['apartamentos']['opengraph_type'] = 'object';
$traduccionesArchive['apartamentos']['opengraph_image'] = 'http://www.hotel.com/img/logo.png';
$traduccionesArchive['apartamentos']['opengraph_image_size'] = 100;

$traduccionesArchive['destinos']['title'] = 'Mapa de localizacion de Hotel, Andalucia';
$traduccionesArchive['destinos']['metakey'] = 'palabra1, palabra2, palabra3';
$traduccionesArchive['destinos']['metadesc'] = 'Mapa de Hoteles en Andalucia, en los destinos vacacionales de Costa del Sol, Costa de la Luz y Sierra de Grazalema Andalucia.';
$traduccionesArchive['destinos']['opengraph_type'] = 'object';
$traduccionesArchive['destinos']['opengraph_image'] = 'http://www.hotel.com/img/logo.png';
$traduccionesArchive['destinos']['opengraph_image_size'] = 100;

$traduccionesArchive['ofertas']['title'] = 'Ofertas Hotel Costa del Sol, Costa de la Luz ';
$traduccionesArchive['ofertas']['metakey'] = 'palabra1, palabra2, palabra3';
$traduccionesArchive['ofertas']['metadesc'] = 'Ahorra en tus vacaciones con las ofertas en nuestros hoteles de la Costa del Sol, Costa de la Luz y Andalucia.';
$traduccionesArchive['ofertas']['opengraph_type'] = 'object';
$traduccionesArchive['ofertas']['opengraph_image'] = 'http://www.hotel.com/img/logo.png';
$traduccionesArchive['ofertas']['opengraph_image_size'] = 100;

但是现在不行了,但是过去可以正常,过滤器是form module yoast SEO https://yoast.com/wordpress/plugins/seo/

Y 试过这个Wordpress: How to return value when use add_filter?

我有点困惑,因为:

add_filter( 'wpseo_title', function(){return 'foo';}

在 get_archive_seo 函数之外工作,但在函数内部不工作。

谁能帮帮我?

【问题讨论】:

    标签: php filter wordpress


    【解决方案1】:

    你可以这样使用,这可能对你有帮助。

    function title_function_name($title) {
        $title = "Your title write here";
        return $title;
    }
    
    add_filter('wp_title', 'title_function_name', 15);
    if (!has_filter('wpseo_title'))
        add_filter('wpseo_title', 'title_function_name', 15);
    

    【讨论】:

    • 在这种情况下,它必须为我要修改的每种类型的标签编写一个函数。在我的功能中,我有一个“foreach”,问题是“为什么这不起作用?”它工作了一段时间,为什么“add_filter”不能在函数内工作?
    • @Sakrow 我们必须把它放在外面——因为你正在尝试。您通常希望 WP 在它开始执行任何实际输出之前,在读取所有 PHP 时设置您的过滤器和操作。
    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多