自定义 SEO Yoast 的元标记
Customize meta tag of SEO Yoast
我正在将 woocommerce 与 seo yoast 结合使用。如果产品 seo 未完成,我希望在产品详细信息页面上显示自定义分类法 seo 详细信息。
这是我正在尝试的:
function custom_metas()
{
if(is_product()){
global $post;
$prod_meta_title = get_post_meta($post->ID, '_yoast_wpseo_title', true);
$prod_meta_desc = get_post_meta($post->ID, '_yoast_wpseo_metadesc', true);
$prod_meta_kw = get_post_meta($post->ID, '_yoast_wpseo_focuskw', true);
if(empty($prod_meta_desc) && empty($prod_meta_title) && empty($prod_meta_kw))
{
$terms = get_the_terms( $post->ID, 'brand' );
$meta = get_option( 'wpseo_taxonomy_meta' );
$terms = array_reverse($terms);
if(!empty($terms))
{
$set_meta = 0;
foreach($terms as $term)
{
if($set_meta == 1)
{
break;
}
$term_meta_title = $meta["brand"][$term->term_id]['wpseo_title'];
$term_meta_desc = $meta["brand"][$term->term_id]['wpseo_desc'];
$term_meta_keywords = $meta["brand"][$term->term_id]['wpseo_focuskw'];
if(!empty($term_meta_title) || !empty($term_meta_desc) || !empty($term_meta_keywords))
{
echo "coming";
//wpseo_replace_vars( $term_meta_title, get_post( $post_id, ARRAY_A ) )
apply_filters( 'wpseo_title', "tseting");
apply_filters( 'wpseo_metadesc', trim( $term_meta_desc ) );
apply_filters( 'wpseo_metakey', trim( $term_meta_keywords ) );
$set_meta = 1;
}
}
}
}
}
}
add_action("wp_head","custom_metas");
我的自定义分类是品牌。问题是 seo 细节没有覆盖现有的。
我怎样才能做到这一点?
我找到了修复程序。
在 single.php 文件中,我在调用 header 之前使用了过滤器函数。
这是我的 single.php
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
global $post, $product;
if(is_product()){
global $post;
$prod_meta_title = get_post_meta($post->ID, '_yoast_wpseo_title', true);
$prod_meta_desc = get_post_meta($post->ID, '_yoast_wpseo_metadesc', true);
$prod_meta_kw = get_post_meta($post->ID, '_yoast_wpseo_focuskw', true);
if(empty($prod_meta_desc) && empty($prod_meta_title) && empty($prod_meta_kw))
{
add_filter('wpseo_metadesc', 'custom_metadesc', 100,1);
add_filter('wpseo_metakey', 'custom_metakeywords', 100,1);
}
}
get_header('shop'); ?>
并且在主题的 function.php 中,我定义了这些过滤函数:
function custom_metadesc($desc){
global $post;
$terms = get_the_terms( $post->ID, 'brand' );
$meta = get_option( 'wpseo_taxonomy_meta' );
$terms = is_array($terms) ? array_reverse($terms) : $terms;
if(!empty($terms))
{
$set_meta = 0;
foreach($terms as $term)
{
if($set_meta == 1)
{
break;
}
$term_meta_desc = $meta["brand"][$term->term_id]['wpseo_desc'];
if(!empty($term_meta_desc))
{
$desc = $term_meta_desc;
$set_meta = 1;
}
}
}
return trim($desc);
}
function custom_metakeywords($keywords){
global $post;
$terms = get_the_terms( $post->ID, 'brand' );
$meta = get_option( 'wpseo_taxonomy_meta' );
$terms = array_reverse($terms);
if(!empty($terms))
{
$set_meta = 0;
foreach($terms as $term)
{
if($set_meta == 1)
{
break;
}
$term_meta_keywords = $meta["brand"][$term->term_id]['wpseo_focuskw'];
if(!empty($term_meta_keywords))
{
$keywords = $term_meta_keywords;
$set_meta = 1;
}
}
}
return trim($keywords);
}
我正在将 woocommerce 与 seo yoast 结合使用。如果产品 seo 未完成,我希望在产品详细信息页面上显示自定义分类法 seo 详细信息。
这是我正在尝试的:
function custom_metas()
{
if(is_product()){
global $post;
$prod_meta_title = get_post_meta($post->ID, '_yoast_wpseo_title', true);
$prod_meta_desc = get_post_meta($post->ID, '_yoast_wpseo_metadesc', true);
$prod_meta_kw = get_post_meta($post->ID, '_yoast_wpseo_focuskw', true);
if(empty($prod_meta_desc) && empty($prod_meta_title) && empty($prod_meta_kw))
{
$terms = get_the_terms( $post->ID, 'brand' );
$meta = get_option( 'wpseo_taxonomy_meta' );
$terms = array_reverse($terms);
if(!empty($terms))
{
$set_meta = 0;
foreach($terms as $term)
{
if($set_meta == 1)
{
break;
}
$term_meta_title = $meta["brand"][$term->term_id]['wpseo_title'];
$term_meta_desc = $meta["brand"][$term->term_id]['wpseo_desc'];
$term_meta_keywords = $meta["brand"][$term->term_id]['wpseo_focuskw'];
if(!empty($term_meta_title) || !empty($term_meta_desc) || !empty($term_meta_keywords))
{
echo "coming";
//wpseo_replace_vars( $term_meta_title, get_post( $post_id, ARRAY_A ) )
apply_filters( 'wpseo_title', "tseting");
apply_filters( 'wpseo_metadesc', trim( $term_meta_desc ) );
apply_filters( 'wpseo_metakey', trim( $term_meta_keywords ) );
$set_meta = 1;
}
}
}
}
}
}
add_action("wp_head","custom_metas");
我的自定义分类是品牌。问题是 seo 细节没有覆盖现有的。
我怎样才能做到这一点?
我找到了修复程序。
在 single.php 文件中,我在调用 header 之前使用了过滤器函数。
这是我的 single.php
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
global $post, $product;
if(is_product()){
global $post;
$prod_meta_title = get_post_meta($post->ID, '_yoast_wpseo_title', true);
$prod_meta_desc = get_post_meta($post->ID, '_yoast_wpseo_metadesc', true);
$prod_meta_kw = get_post_meta($post->ID, '_yoast_wpseo_focuskw', true);
if(empty($prod_meta_desc) && empty($prod_meta_title) && empty($prod_meta_kw))
{
add_filter('wpseo_metadesc', 'custom_metadesc', 100,1);
add_filter('wpseo_metakey', 'custom_metakeywords', 100,1);
}
}
get_header('shop'); ?>
并且在主题的 function.php 中,我定义了这些过滤函数:
function custom_metadesc($desc){
global $post;
$terms = get_the_terms( $post->ID, 'brand' );
$meta = get_option( 'wpseo_taxonomy_meta' );
$terms = is_array($terms) ? array_reverse($terms) : $terms;
if(!empty($terms))
{
$set_meta = 0;
foreach($terms as $term)
{
if($set_meta == 1)
{
break;
}
$term_meta_desc = $meta["brand"][$term->term_id]['wpseo_desc'];
if(!empty($term_meta_desc))
{
$desc = $term_meta_desc;
$set_meta = 1;
}
}
}
return trim($desc);
}
function custom_metakeywords($keywords){
global $post;
$terms = get_the_terms( $post->ID, 'brand' );
$meta = get_option( 'wpseo_taxonomy_meta' );
$terms = array_reverse($terms);
if(!empty($terms))
{
$set_meta = 0;
foreach($terms as $term)
{
if($set_meta == 1)
{
break;
}
$term_meta_keywords = $meta["brand"][$term->term_id]['wpseo_focuskw'];
if(!empty($term_meta_keywords))
{
$keywords = $term_meta_keywords;
$set_meta = 1;
}
}
}
return trim($keywords);
}